Для Apache:
'http'.(empty($_SERVER['HTTPS'])?'':'s').'://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']
Вы также можете использовать HTTP_HOST
вместо SERVER_NAME
, как прокомментировал Герман. См. этот связанный вопрос для полного обсуждения. Короче говоря, вы, вероятно, в порядке с использованием любого. Вот версия 'host':
'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://stackoverflow.com/$1 [R=301,L]
#sometimes u may need to omit this slash ^ depending on your server
Надеюсь, это поможет. Реальный смысл этого ответа состоял в том, чтобы просто предоставить первую строку кода для тех людей, которые оказались здесь при поиске способа получить полный URL с помощью apache:)