2016-02-29 129 views
1

在我的網絡服務器上,我想將所有訪問重定向到特定文件,但有兩個例外。如果URI是mydomain.com/Folder1mydomain/Folder2(以及其後的任何內容),它們應該正常工作。我試過:htaccess RewriteCond不起作用

RewriteCond %{REQUEST_URI} !=www.mydomain.com/Folder1.* | www.mydomain.com/Folder2.* 
RewriteRule ^.*$ www.mydomain.com/error.php [R=301,L] 


RewriteCond %{DOCUMENT_ROOT}/$1 -d 
RewriteRule ^(.*?[^/])$ %{REQUEST_URI}/ [L,NE] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)/?$ /index.php?path=$1 [NC,L,QSA] 

但是這個規則不起作用。有人可以看看嗎?

回答

2

您無法使用REQUEST_URI變量來匹配域名。您可以使用此規則來代替:

RewriteCond %{THE_REQUEST} !\s/+(error\.php|Folder1|Folder2) [NC] 
RewriteRule^/error.php [R=301,L] 

RewriteCond %{DOCUMENT_ROOT}/$1 -d 
RewriteRule ^(.*?[^/])$ %{REQUEST_URI}/ [L,NE] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)/?$ /index.php?path=$1 [L,QSA] 

確保在測試之前清除瀏覽器緩存。

+0

啊好吧謝謝你。這很好,但我也有兩個其他RewriteRules在我的htaccess文件中應用此條件後(我已將它們添加到問題)。如果應用了第一條規則,還是必須重寫它們,是否可以忽略它們? – Cilenco

+1

這很有用,謝謝!你也可以簡要解釋'\ s/+'的作用嗎? – Cilenco

+1

由於我在這裏使用了'THE_REQUEST'變量,這個變量的示例值是'GET /index.php?id=123 HTTP/1.1',在這裏'\ s/+'在'GET'後匹配空格,然後有一個或多個URI – anubhava