Для 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://stackoverflow.com/$1 [R=301,L]
#sometimes u may need to omit this slash ^ depending on your server
Сподіваюся, що це допомагає. Справжній сенс цієї відповіді полягав лише в тому, щоб надати перший рядок коду тим людям, які потрапили сюди під час пошуку способу отримати повну URL-адресу за допомогою апачі :)