Apache,SERVER_NAME被HTTP_HOST覆盖

我正在使用Apache / 2.4.10(Win32) ,我有一个关于SERVER_NAMEHTTP_HOST之间的关系的问题。

我注意到了一个奇怪的(至less我认为)apache的行为,在我的httpd.conf我有:

 ServerName example.com:80 

现在,我通过从Apache 服务器获取的PHP 服务器variables进行testing。

从PHP(上面的链接):

如果脚本在虚拟主机上运行,​​则将为该虚拟主机定义的值。

我没有使用任何虚拟主机。

SERVER_NAMEHTTP_HOST覆盖,例如,如果我将通过m.example.com访问网站, SERVER_NAMEHTTP_HOST覆盖,两者都等于相同的值,现在尽pipe它已经过testing,但我想知道:

  • apache是​​否使用任何虚拟主机,而我不知道它, 这里是 我的httpd.conf文件 ?
  • PHP还是Apache的行为?
  • 它是由PHP或Apache自动完成(覆盖)(在这一点上我不知道谁是有罪的)?

编辑:

  • 覆盖是由Apache完成的,我已经使用.htaccess文件进行了testing,结果是甚至在variables传递到PHP ,覆盖已经完成。

所以覆盖是由Apache完成的,唯一的问题是这样的覆盖的条件是什么,更重要的是有一种方法来获取或从httpd.conf中提供的ServerName值的variables?

如果你想追踪可能的虚拟名称和/或重写,几个地方检查:1)ports.conf('NameVirtualHost'在那里定义); 2).htaccess文件。

但是,我认为对你的问题更正确的答案是关系。 ServerName是apache服务器自己调用的默认名称。 这个名称不一定需要匹配的DNSlogging,因为本地的/ etc / hosts条目将使Apache免于抱怨。

另一方面,HTTP_HOST是客户端(浏览器)知道服务器的名称,为了能够访问, 必须有一个匹配的DNS条目(或客户端上匹配的主机条目)才能parsing和访问。

在这种情况下,HTTP_HOST将总是出现在Apache请求日志中,因为除了请求的HTTP_HOST外,客户端不知道服务器的其他名称。

跟随:FINDSTR的使用是: findstr "string_to_find" path_to_file

下面是一个示例dosbatch file(脚本),它使用FINDSTR来查找httpd.conf中的“ServerName”行。 这个批处理脚本也parsing它find的行和回显(即打印到屏幕)只有ServerNamevariables的值,而不是整行。
@echo off for /f "tokens=2* delims==" %%i in ('FINDSTR "ServerName" httpd.conf') do ( echo %%i )

您可以编辑单词“httpd.conf”并根据需要指定完整path。