$_SERVER['HTTP_HOST'] также содержит номер порта =/

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

У меня есть 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 ответа

Решение

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

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

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

function getRealHost(){
   list($realHost,)=explode(':',$_SERVER['HTTP_HOST']);
   return $realHost;
}
Другие вопросы по тегам