Apache:
'http'.(empty($_SERVER['HTTPS'])?'':'s').'://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']
Możesz także użyć HTTP_HOST
zamiast, SERVER_NAME
jak skomentował Herman. Zobacz to pokrewne pytanie, aby uzyskać pełną dyskusję. Krótko mówiąc, prawdopodobnie nie masz nic przeciwko korzystaniu z jednego z nich. Oto wersja „hosta”:
'http'.(empty($_SERVER['HTTPS'])?'':'s').'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']
Dla paranoików / Dlaczego to ma znaczenie
Zwykle ustawiam ServerName
w formacie, VirtualHost
ponieważ chcę , aby była to kanoniczna forma witryny. $_SERVER['HTTP_HOST']
Jest ustawiony na podstawie nagłówków żądań. Jeśli serwer odpowie na jakąkolwiek / wszystkie nazwy domen pod tym adresem IP, użytkownik może sfałszować nagłówek lub, co gorsza, ktoś może wskazać rekord DNS na Twój adres IP, a wtedy Twój serwer / witryna będzie obsługiwać witrynę z dynamicznym linki utworzone na podstawie nieprawidłowego adresu URL. Jeśli korzystasz z tej drugiej metody, powinieneś również skonfigurować vhost
lub ustawić .htaccess
regułę wymuszającą domenę, którą chcesz obsługiwać, na przykład:
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
Mam nadzieję, że to pomoże. Prawdziwym celem tej odpowiedzi było po prostu podanie pierwszej linii kodu dla tych osób, które znalazły się tutaj, szukając sposobu na uzyskanie pełnego adresu URL za pomocą apache :)