Для Apache:
'http'.(empty($_SERVER['HTTPS'])?'':'s').'://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']
Вы также можете использовать HTTP_HOST
вместо, SERVER_NAME
как прокомментировал Герман. См. Этот связанный вопрос для полного обсуждения. Короче говоря, вы, вероятно, можете использовать любой из них. Вот версия "хоста":
'http'.(empty($_SERVER['HTTPS'])?'':'s').'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']
Для параноиков / Почему это важно
Как правило, я устанавливаю ServerName
в VirtualHost
потому что я хочу , чтобы быть канонической формой на сайте. $_SERVER['HTTP_HOST']
Устанавливается на основе заголовков запроса. Если сервер отвечает на любые / все доменные имена на этом IP-адресе, пользователь может подделать заголовок или, что еще хуже, кто-то может указать DNS-запись на ваш IP-адрес, и тогда ваш сервер / веб-сайт будет обслуживать веб-сайт с динамическим ссылки построены на неправильном URL. Если вы используете последний метод, вам также следует настроить vhost
или установить .htaccess
правило для принудительного применения домена, который вы хотите обслуживать, например:
RewriteEngine On
RewriteCond %{HTTP_HOST} !(^stackoverflow.com*)$
RewriteRule (.*) https:
Надеюсь, это поможет. Настоящая цель этого ответа заключалась в том, чтобы просто предоставить первую строку кода для тех людей, которые оказались здесь, когда искали способ получить полный URL-адрес с помощью apache :)