Apache – 如何使用每个虚拟主机的重写规则?

我已经build立了一个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] 

所以,我可以添加一个子域到我的网站,但确保所有stream量example.comanything.example.com除了dev.example.com被定向到www.example.com

我会在哪里放置这个规则使之有效?

我已经试过每一种方式,包括把它放在httpd.conf中,但似乎要么破坏虚拟主机configuration,要么没有效果。

任何想法和build议将不胜感激。

除非这是您的默认服务器 – IE VirtualHost可能是NameVirtualHost – 那么Apache只会将example.com和www.example.com请求传递给重写规则(如果它在给定的VirtualHost块中)。 如果您将anything.example.com .example.com添加到ServerAlias,那么您可能会发现它在这种情况下工作,但只是为了anything.example.com

为使规则生效,您需要将其置于默认的VirtualHost块中,即通过IP地址访问服务器时出现的VirtualHost ,而不是名称。 在很多的Apache安装上,这是由一个默认的处理程序处理的(欢迎来到Apache风格的页面)。 删除VirtualHost可以使这个默认,这个虚拟主机进一步移动到configuration文件。