$ _SERVER ['HTTP_HOST'] также содержит номер порта = / - PullRequest
9 голосов
/ 22 декабря 2010

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

У меня есть 2 вирулостхота на моем сервере.

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 ]

17 голосов
/ 22 декабря 2010

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

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

1 голос
/ 20 мая 2016

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

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