Apache-2.2

Apache2 虛擬主機重定向,特殊路徑除外

  • December 9, 2013

假設我們有 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>

但這行不通。我做錯了什麼或者這甚至可能嗎?我有什麼不同的做法?

您應該RewriteCond在現有的後面添加另一個以實現此異常。像這樣:

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

請注意,預設情況下,所有RewiteConds 都用邏輯 AND 連接。所以RewriteRule只有當所有RewriteConds 評估為真時才會觸發。

引用自:https://serverfault.com/questions/560107