我们的服务器在端口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。
更多信息:
specificsite.ourdomain.com的site.ourdomain.com的原因是,我们的客户可以访问我们的服务器上托pipe的这个特定的网站。 提前感谢任何帮助!
两个问题:
ServerAlias不支持与VirtualDocumentRoot相同的variables – 将vhost的别名设置为字面意义上的%1.ourserver 。 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>