Вопрос

Я не знаю, может быть, это ошибка.

У меня есть 2 virutalhost на моем сервере.

VirtualHost1.com VirtualHost2.com

Если я открою VirtualHost1.com с портом 80 (VirtualHost1.com:80)

$_SERVER['HTTP_HOST']='virtualhost1.com';

Но если я открою virtualhost2.com:80

$_SERVER['HTTP_HOST']='virtualhost2.com:80'; // NOTE: with port number

Могу я узнать почему?

Это было полезно?

Решение

Значение $_SERVER['HTTP_HOST'] взят непосредственно из Host: HTTP -запрос заголовок. Похоже, запрашивающий клиент заполняет его таким образом.

Я предлагаю использовать $_SERVER['SERVER_NAME'] Вместо этого его значение будет установлено из вашей конфигурации виртуального хоста. Однако, как отмечает Флимм ниже, даже надежность SERVER_NAME все еще может зависеть от конфигурации сервера (проверьте этот ответ Для получения дополнительной информации об этом).

Другие советы

Следующая функция всегда возвращает настоящий хост (пользовательский хост) без порта, и она почти надежна:

function getRealHost(){
   list($realHost,)=explode(':',$_SERVER['HTTP_HOST']);
   return $realHost;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top