$ _SERVER ['HTTP_HOST']也包含端口号= /

时间:2010-12-21 23:11:12

标签: php virtual-hosts superglobals port-number

我不知道这可能是个错误。

我的服务器上有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

我能知道为什么吗?

2 个答案:

答案 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;
}