$_SERVER['HTTP_HOST']
和$_SERVER['SERVER_NAME']
??
答案 0 :(得分:27)
$_SERVER['SERVER_NAME']
给出了主机配置中定义的服务器名称的值(即Apache的Apache .conf文件)。
$_SERVER['HTTP_HOST']
为您提供了通过其填写当前请求的域名,并与请求更直接相关。
HTTP_HOST
在大多数应用程序中通常更有用,因为它直接与请求相关,而SERVER_NAME
可以返回conf文件中的任何值,并且不会告诉您有关请求的任何信息。所有
我将举例说明HTTP_HOST
与SERVER_NAME
的区别。假设您在Apache中定义了一个主机,其ServerName为domain.com
,IP地址为1.2.3.4
。
让我们看一下两个传入的请求URL,并显示这些变量之间的区别:
http://www.domain.com
HTTP_HOST = www.domain.com
SERVER_NAME = domain.com
http://1.2.3.4
HTTP_HOST = 1.2.3.4
SERVER_NAME = domain.com
因此,HTTP_HOST再次与请求绑定,而SERVER_NAME由服务器配置决定。
答案 1 :(得分:1)
HTTP_HOST
是客户端发送的Host:
标头。因此,它可能不那么值得信赖。 SERVER_NAME
由服务器的配置决定,无论用户输入如何。
行为上的差异是微妙的。这里展示了一些很好的例子:http://shiflett.org/blog/2006/mar/server-name-versus-http-host
' SERVER_NAME'当前脚本正在其下执行的服务器主机的名称。如果脚本在虚拟主机上运行,则这将是为该虚拟主机定义的值。
' HTTP_HOST'当前请求的主机:标头的内容(如果有)。
答案 2 :(得分:0)
<强> HTTP_HOST
强>
当前请求的主机:标头的内容(如果有)。
<强> SERVER_NAME
强>
执行当前脚本的服务器主机的名称。如果脚本在虚拟主机上运行,则这将是为该虚拟主机定义的值。