我已经设置了一个 vHost,如下所示:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName example.com
ServerAlias www.example.com
DirectoryIndex index.php
DocumentRoot /var/www/example.com/www/
<Directory />
Options -FollowSymLinks -Includes -Indexes -MultiViews
AllowOverride None
</Directory>
<Directory /var/www/example.com/www/>
<LimitExcept GET POST>
deny from all
</LimitExcept>
Options -FollowSymLinks -Includes -Indexes -MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
</VirtualHost>
我想添加一条重写规则如下:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{HTTP_HOST} !^dev\.example\.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
这样我就可以向我的网站添加一个子域名,但要确保所有到example.com
或anything.example.com
除此之外的流量dev.example.com
都被定向到www.example.com
。
我应该把这条规则放在哪里才能使其有效?
我尝试了所有方法,包括将其放在 httpd.conf 中,但似乎要么破坏了 vhost 配置,要么没有效果。
任何想法和建议都将不胜感激。
答案1
除非这是您的默认服务器(IEVirtualHost
可能是一个NameVirtualHost
),否则 apache 将只传递对 example.com 的请求,并www.example.com
传递到重写规则(如果它在给定的VirtualHost
块内)。如果您添加anything.example.com
到 ServerAlias,那么您可能会发现它在该上下文中有效,但仅限于anything.example.com
要使规则生效,您需要将其放在默认VirtualHost
块中,即VirtualHost
通过 IP 地址(而不是名称)访问服务器时出现的块。在许多 Apache 安装中,这由默认处理程序处理(欢迎使用 Apache 样式页面)。删除该处理程序VirtualHost
可以使该处理程序成为默认处理程序,也可以将此虚拟主机进一步移至配置文件中。