假设我们有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
评估为真时才被触发。