Für Apache:
'http'.(empty($_SERVER['HTTPS'])?'':'s').'://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']
Sie können auch HTTP_HOST
anstelle von SERVER_NAME
wie Herman kommentiert verwenden. In dieser verwandten Frage finden Sie eine vollständige Diskussion. Kurz gesagt, Sie sind wahrscheinlich damit einverstanden, beides zu verwenden. Hier ist die 'Host'-Version:
'http'.(empty($_SERVER['HTTPS'])?'':'s').'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']
Für die Paranoiden / Warum es wichtig ist
Normalerweise setze ich ServerName
in, VirtualHost
weil ich möchte, dass dies die kanonische Form der Website ist. Das $_SERVER['HTTP_HOST']
wird basierend auf den Anforderungsheadern festgelegt. Wenn der Server auf einen oder alle Domainnamen unter dieser IP-Adresse antwortet, könnte ein Benutzer den Header fälschen, oder schlimmer noch, jemand könnte einen DNS-Eintrag auf Ihre IP-Adresse verweisen, und dann würde Ihr Server / Ihre Website eine Website mit Dynamik bereitstellen Links, die auf einer falschen URL basieren. Wenn Sie die letztere Methode verwenden, sollten Sie auch Ihre konfigurieren vhost
oder eine .htaccess
Regel einrichten , um die Domain zu erzwingen, die Sie bereitstellen möchten.
RewriteEngine On
RewriteCond %{HTTP_HOST} !(^stackoverflow.com*)$
RewriteRule (.*) https://stackoverflow.com/$1 [R=301,L]
#sometimes u may need to omit this slash ^ depending on your server
Hoffentlich hilft das. Der eigentliche Sinn dieser Antwort bestand darin, die erste Codezeile für diejenigen Personen bereitzustellen, die hier gelandet sind, als sie nach einer Möglichkeit gesucht haben, die vollständige URL mit Apache zu erhalten :)