2016-02-29 85 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