我一直在寻找一种将域自动重定向到特定文件夹的方法,并在 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/
我获得了最后两个域的预期结果,但是本地主机不起作用。
我从上面的问题中复制了脚本,并尝试添加类似
<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
这是怎么回事?谢谢您的帮助!
答案1
实际上 Apache 已经能够做到这一点。如果您已经激活基于名称的虚拟主机有一个默认主机负责不匹配的主机名。
如果 ServerName 或 ServerAlias 匹配,则主机名匹配。如果配置的虚拟主机均未提供与请求匹配的主机,则将使用默认主机。这通常是配置中的第一个虚拟主机。
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>