我不知道这可能是个错误。
我的服务器上有2个虚拟主机。
virtualhost1.com virtualhost2.com
如果我用端口80(virtualhost1.com:80)打开virtualhost1.com
$_SERVER['HTTP_HOST']='virtualhost1.com';
但如果我打开virtualhost2.com:80
$_SERVER['HTTP_HOST']='virtualhost2.com:80'; // NOTE: with port number
我能知道为什么吗?
答案 0 :(得分:17)
$_SERVER['HTTP_HOST']
的值直接来自Host:
HTTP请求标头。请求客户似乎正在以这种方式填写它。
我建议使用$_SERVER['SERVER_NAME']
,因为它的值将从您的虚拟主机配置中设置。但是,正如Flimm在下面指出的那样,即使SERVER_NAME
的可靠性仍然可以依赖于服务器配置(请查看this answer以获取更多信息)。
答案 1 :(得分:1)
以下功能总是返回没有端口的真实主机(用户键入的主机),它几乎可靠:
function getRealHost(){
list($realHost,)=explode(':',$_SERVER['HTTP_HOST']);
return $realHost;
}