Apache2 虚拟主机重定向(特殊路径除外)

Apache2 虚拟主机重定向(特殊路径除外)

假设我们有 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]

请注意,默认情况下,所有RewiteConds 都通过逻辑 AND 连接。因此,RewriteRule只有当所有RewriteConds 的计算结果为真时,才会触发。

相关内容