$_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;
}