除特殊path外,Apache2虚拟主机redirect

假设我们有2个域。

www.my-domain.com www.mydomain.com 

作为标准,我们有一个从.mydomain.com /.my-domain.com / via的redirect

 (mydomain.conf) <Virtualhost *:80> ServerName mydomain.com ServerAlias mydomain.com *.mydomain.com RewriteEngine on RewriteCond %{HTTP_HOST} (.+\.)?mydomain\.com(\/.+)?$ [NC] RewriteRule (.*) http://%1my-domain.com$2$1 [R=301] </VirtualHost> 

但现在,由于向后兼容,我们有一个特殊的URL“www.mydomain.com/special/task.php”,需要直接提供,不应该被redirect。

我想要做的是这样的事情:

 (mydomain.conf) <Virtualhost *:80> ServerName mydomain.com ServerPath /special/ DocumentRoot /var/www/special/ </VirtualHost> <Virtualhost *:80> ServerName mydomain.com ServerAlias mydomain.com *.mydomain.com RewriteEngine on RewriteCond %{HTTP_HOST} (.+\.)?mydomain\.com(\/.+)?$ [NC] RewriteRule (.*) http://%1my-domain.com$2$1 [R=301] </VirtualHost> 

但是这不会工作。 我做错了什么,甚至可能呢? 我有什么不同的做法?

您应该在现有的一个之后添加另一个RewriteCond来实现这个exception。 喜欢这个:

RewriteCond %{REQUEST_URI} !=/special/task.php [NC]

请注意,默认情况下,所有RewiteCond都与逻辑AND连接。 所以RewriteRule只有在所有的RewriteCond评估为真时才被触发。