Apache VirtualHost部分被忽略

我正在Windows上运行一个本地服务器,并且只要定义了一个variables,我就想为它的特定部分提供局域网访问。 它工作正常,除了主configuration服务,而不是虚拟主机

我特意将虚拟主机指向了一个带有错误的DirectoryIndex的禁止目录,以确保它实际上可以正常工作,但无论我做什么,页面始终都能正确服务。 这是虚拟主机:

 <VirtualHost ${LANIP}:${PORT}> DocumentRoot ${SRVROOT}/htdocs/phpinfo ServerName ${LANIP}:${PORT} DirectoryIndex index.pl </VirtualHost> 

这里是完整的httpd.conf ,没有评论。

当我使用httpd -DLANACCESS -S ,这是输出:

 c:\fauna\apache\bin>httpd -DLANACCESS -S VirtualHost configuration: 192.168.1.6:80 192.168.1.6 (C:/fauna/apache/conf/httpd.conf:464) ServerRoot: "c:/fauna/apache" Main DocumentRoot: "C:/fauna/apache/htdocs" Main ErrorLog: "c:/fauna/apache/logs/error.log" Mutex rewrite-map: using_defaults Mutex lua-ivm-shm: using_defaults Mutex default: dir="C:/fauna/apache/logs/" mechanism=default PidFile: "c:/fauna/apache/logs/httpd.pid" Define: LANACCESS Define: DUMP_VHOSTS Define: DUMP_RUN_CFG Define: FAUNAROOT=/fauna Define: WIN_FAUNAROOT=C:\fauna Define: SRVROOT=/fauna/apache Define: WIN_SRVROOT=C:\fauna\apache Define: PERLPATH=C:\fauna\perl Define: WIN_PERLPATH=C:\fauna\perl Define: LANIP=192.168.1.6 Define: PORT=80 

我认为,这表示Apache正确地识别出有一个VirtualHost指令,但忽略了其中的所有内容,或者不知何故它不匹配。 无论如何,如果我从服务器路由到localhost ,或从局域网上的另一台机器路由到192.168.1.6 ,它服务于同一页面。 它尊重权限,但是从lan应该打破并且给这个testingconfiguration一个404,不服务主要站点。

我什至试图覆盖默认的虚拟主机:

 <VirtualHost _default_> DocumentRoot ${SRVROOT}/htdocs/nothing ServerName localhost:80 </VirtualHost> 

这从Apache提供这个输出:

 c:\fauna\apache\bin>httpd -DLANACCESS -S AH00112: Warning: DocumentRoot [c:/fauna/apache/htdocs/nothing] does not exist VirtualHost configuration: 192.168.1.6:80 192.168.1.6 (C:/fauna/apache/conf/httpd.conf:464) *:80 localhost (C:/fauna/apache/conf/httpd.conf:474) ServerRoot: "c:/fauna/apache" Main DocumentRoot: "C:/fauna/apache/htdocs" Main ErrorLog: "c:/fauna/apache/logs/error.log" Mutex rewrite-map: using_defaults Mutex lua-ivm-shm: using_defaults Mutex default: dir="C:/fauna/apache/logs/" mechanism=default PidFile: "c:/fauna/apache/logs/httpd.pid" Define: LANACCESS Define: DUMP_VHOSTS Define: DUMP_RUN_CFG Define: FAUNAROOT=/fauna Define: WIN_FAUNAROOT=C:\fauna Define: SRVROOT=/fauna/apache Define: WIN_SRVROOT=C:\fauna\apache Define: PERLPATH=C:\fauna\perl Define: WIN_PERLPATH=C:\fauna\perl Define: LANIP=192.168.1.6 Define: PORT=80 

所以,显然,它parsing了VirtualHost标签。 但是,这具有完全相同的效果,并且两个虚拟主机完全被忽略,就好像它们不匹配一样。

编辑 – 我已经通过mod_info确认VirtualHost确实匹配,但当然由于某种原因, DocumentRootDirectoryIndex完全被忽略。

tl; dr:除非我错了,否则在主服务器上设置别名需要在虚拟主机中单独设置别名,否则主站点会因为别名而被服务,特别是如果您有别名/像我一样。 不是100%肯定这一点,但它是有道理的基础上,我得到了什么。

我似乎已经解决了这个虚拟主机的定义:

 <IfDefine LANACCESS> <VirtualHost ${LANIP}:${PORT}> Alias "/" "${SRVROOT}/htdocs/phpinfo/" # DocumentRoot ${SRVROOT}/htdocs/phpinfo <Directory "${SRVROOT}/htdocs/phpinfo"> AllowOverride None # Options -ExecCGI Require ip 192.168.1 # DirectoryIndex phpinfo.php </Directory> Redirect 404 /info Redirect 404 /status ServerName ${LANIP}:${PORT} </VirtualHost> </IfDefine> 

以前,访问将通过虚拟主机进行注册,但是会提供主页面。 通过别名/与预期的DocumentRoot ,它适当地服务于预期的页面。 Directory是必要的,以设置适当的权限,否则它似乎从以前的Directory定义inheritance或去默认或什么的。 因此,如果您以前的Directory定义需要修改,请这样做。

DocumentRoot显然没有效果。 我不知道为什么,但从主configuration中删除它似乎没有任何效果。 也许我设置的方式覆盖了它。

如果你使用的是类似于mod_info东西,使用Redirect 404来取消这些位置,或者Require禁止访问,否则它们将正常运行,而不pipe你设置的是什么Alias指令。

除非您为其他服务器位置设置了Alias否则以前的重写或出于其他原因,我无法弄清楚。

您很可能成为Windows文件系统虚拟化的受害者,其中由非Administratorpipe理员编辑的文件显示已经改变,但不是作为服务运行的httpd。

使用真正的pipe理员帐户编辑您的configuration。