$ SERVER ['HTTP HOST'] также содержит номер порта =/

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

у меня есть 2 virutalhosts на моем сервере.

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

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

2 ответов


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

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


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

function getRealHost(){
   list($realHost,)=explode(':',$_SERVER['HTTP_HOST']);
   return $realHost;
}