configurationApache大量虚拟主机到不同的目录

我们的服务器在端口9000上运行Apache(因为IIS在80),我们有以下configuration(vhosts.conf)来访问我们的站点:

NameVirtualHost *:9000 UseCanonicalName Off <VirtualHost *:9000> ServerAlias %1.ourserver VirtualDocumentRoot D:/oursites/%1 VirtualScriptAlias D:/oursites/%1 </VirtualHost> 

所以我们可以打开浏览器并通过http://someclient.ourserver:9000/ 。 到现在为止还挺好。

现在,我们正在安装一个新的服务器,Apache将在端口80上运行,但是我们需要一个特定的站点将VirtualDocumentRoot放到不同的驱动器/目录中。 我们尝试了这样的事情(没有成功):

 NameVirtualHost *:80 UseCanonicalName Off <VirtualHost specificsite.ourdomain.com:80> ServerAlias specificsite.ourdomain.com VirtualDocumentRoot C:/specificsite VirtualScriptAlias C:/specificsite </VirtualHost> <VirtualHost *:80> ServerAlias %1.ourserver VirtualDocumentRoot D:/oursites/%1 VirtualScriptAlias D:/oursites/%1 </VirtualHost> 

当我们testing时,结果是,在浏览器上访问http://specificsite.ourdomain.com/试图“redirect”到D:/oursites/specificsite ,这是不正确的

访问http://someclient.ourserver/ Apache 正确地redirect到D:/oursites/someclient

那么我错过了什么? 看起来我忘了一点点细节,导致所有的请求落在第二个VirtualHost。

更多信息:

  • 运行Xampp 1.7.7
  • Windows Server 2008 R2
  • DNSpipe理中的两个条目:一个用于* .ourserver,另一个用于特定的site.ourdomain.com;
  • 使用specificsite.ourdomain.com的site.ourdomain.com的原因是,我们的客户可以访问我们的服务器上托pipe的这个特定的网站。

提前感谢任何帮助!

两个问题:

  1. ServerAlias不支持与VirtualDocumentRoot相同的variables – 将vhost的别名设置为字面意义上的%1.ourserver
  2. 您的新虚拟主机的声明与NameVirtualHost指令不匹配,因此在主机/端口组合上发出请求时不会被检查。 它使用DNS来查找要绑定的地址,因此不会将dynamic虚拟主机脱机的事实意味着您的服务器可能位于NAT之后。

尝试这个:

 NameVirtualHost *:80 # Put this one's configuration first, so that it's the default. <VirtualHost *:80> # Add a ServerName directive so that it doesn't guess - it can be anything ServerName dynamic.filler.name ServerAlias *.ourserver VirtualDocumentRoot D:/oursites/%1 VirtualScriptAlias D:/oursites/%1 </VirtualHost> <VirtualHost *:80> ServerName specificsite.ourdomain.com VirtualDocumentRoot C:/specificsite VirtualScriptAlias C:/specificsite </VirtualHost>