![Apache2 虚拟主机重定向(特殊路径除外)](https://linux22.com/image/622502/Apache2%20%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA%E9%87%8D%E5%AE%9A%E5%90%91%EF%BC%88%E7%89%B9%E6%AE%8A%E8%B7%AF%E5%BE%84%E9%99%A4%E5%A4%96%EF%BC%89.png)
假设我们有 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 的计算结果为真时,才会触发。