apache虚拟主机:自动子域名exception

我一直在寻找一种方法来自动redirect域到一个特定的文件夹,并喜欢在这里的serverfault: Apache2的VirtualHost自动子域的一个很好的答案。 (接受的答案)

到目前为止一切正常,但现在我需要添加一个例外。 我想要的结果是这样的:

http://localhost/ --> E:/websites/ http://specialDomain2/ --> E:/websites/ http://normal1.com/ --> E:/websites/normal1.com/ http://normalDomain.com/ --> E:/websites/normalDomain.com/ 

我得到最后两个域的结果,但localhost不起作用。

我从上面的问题复制脚本,并试图添加类似的东西

 <VirtualHost *:80> RewriteEngine On RewriteMap lowercase int:tolower # if already rewitten and we have the right path, stop right here RewriteRule ^(E:/websites/[^/]+/.*)$ $1 [L] RewriteRule ^localhost/(.*)$ E:/websites/$1 [L] # <-- Added this row RewriteRule ^(.+) ${lowercase:%{SERVER_NAME}}$1 [C] RewriteRule ^(www\.)?([^/]+)/(.*)$ E:/websites/$2/$3 [L,E=VHOST_ROOT:E:/websites/$2/] </VirtualHost> 

我认为这是有道理的,因为我会翻译这个

 if URL = localhost/* Do nothing (because of the [L] flag), and use the default document root specified earlier else continue 

这有什么问题? 谢谢你的帮助!

其实Apache已经可以了。 如果您已激活基于名称的虚拟主机 ,则有一个默认主机负责不匹配的主机名。

如果ServerName或ServerAlias匹配,则主机名称匹配。 如果没有configuration的虚拟主机为请求提供匹配,则将使用默认主机。 这通常是您的configuration中的第一个虚拟主机。

 NameVirtualHost *:80 # default virtual host <VirtualHost *:80> ServerName localhost DocumentRoot /www/localhost </VirtualHost> <VirtualHost *:80> ServerName normal1.com ServerAlias www.normal1.com DocumentRoot /www/normal1.com </VirtualHost> <VirtualHost *:80> ServerName normalDomain.com ServerAlias www.normalDomain.com DocumentRoot /www/normalDomain.com </VirtualHost>