假设我们有 2 个域。
www.my-domain.com
www.mydomain.com
作为标准,我们有一个重定向.mydomain.com/到.my-domain.com/通过
(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”,需要直接提供服务,而不应重定向。
我想要做的事情是这样的:
(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>
但这行不通。我做错了什么,或者这有可能吗?我应该做些什么不同的事情?
答案1
你应该RewriteCond
在现有的代码后面添加另一个代码来实现这个异常。就像这样:
RewriteCond %{REQUEST_URI} !=/special/task.php [NC]
请注意,默认情况下,所有RewiteCond
s 都通过逻辑 AND 连接。因此,RewriteRule
只有当所有RewriteCond
s 的计算结果为真时,才会触发。