重写条件!被忽略

时间:2015-06-10 10:05:24

标签: regex apache .htaccess mod-rewrite redirect

我正在研究重写规则。每次拨打移动网站的电话都应该重定向到非移动版本(或者在我的示例中,谷歌),除了几页。这必须在几个环境中工作,但它们不是问题(我可以看到)。

我有什么:

RewriteCond %{HTTP_HOST} m\.(local\.|lcl\.|dvl\.|uat\.|)testsite\.be$
RewriteCond %{REQUEST_URI} !^/categoryOne
RewriteCond %{REQUEST_URI} !^/categoryTwo
RewriteRule (.*) http://www.google.be/ [L,R=301]

如果我上网:http://m.lcl.testsite.be/categoryOne我会被重定向......即使http://htaccess.madewithlove.be/说我不应该这样做。

所以我简化了:

RewriteCond %{REQUEST_URI} !^/categoryOne
RewriteRule (.*) http://www.google.be/ [L,R=301]

http://m.lcl.testsite.be/categoryOne

- >我被重定向

RewriteCond %{REQUEST_URI} ^/categoryOne
RewriteRule (.*) http://www.google.be/ [L,R=301]

http://m.lcl.testsite.be/categoryOne

我被重定向(这很好)。

http://m.lcl.testsite.be/randomOtherCategory

- >我没有被重定向。

对我而言,看起来被否定的陈述被忽略了,考虑到我在项目的其他地方使用它,这很奇怪。

有什么见解?

1 个答案:

答案 0 :(得分:1)

.htaccess中可能还有其他规则将REQUEST_URI更改为其他内容并导致基于否定的条件通过。

请改为尝试:

RewriteCond %{THE_REQUEST} !/categoryOne
RewriteRule ^ http://www.google.be/ [L,R=301]

THE_REQUEST变量在其他规则之后不会更改其值。