Regex 重写条件!被忽视

Regex 重写条件!被忽视,regex,apache,.htaccess,mod-rewrite,redirect,Regex,Apache,.htaccess,Mod Rewrite,Redirect,我正在研究重写规则。对移动网站的每一个呼叫都应该被重定向到非移动版本(或者在我的例子中是谷歌),除了几个页面。这必须在几种环境下工作,但它们不是问题所在(据我所见) 我所拥有的: RewriteCond %{HTTP_HOST} m\.(local\.|lcl\.|dvl\.|uat\.|)testsite\.be$ RewriteCond %{REQUEST_URI} !^/categoryOne RewriteCond %{REQUEST_URI} !^/categoryTwo Rewrit

我正在研究重写规则。对移动网站的每一个呼叫都应该被重定向到非移动版本(或者在我的例子中是谷歌),除了几个页面。这必须在几种环境下工作,但它们不是问题所在(据我所见)

我所拥有的:

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]
如果我浏览到:我会被重定向。。。即使他说我不应该这样

所以我简化了:

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

->我被重定向了

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

我被重定向(这很好)

->我没有被重定向

对我来说,否定语句似乎被忽略了,考虑到我在项目的其他地方也使用过它,这很奇怪


有什么见解吗

您的.htaccess中可能有其他规则将
请求URI更改为其他内容,并导致基于否定的条件通过

请尝试以下方法:

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

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

感谢上帝,还是我应该说anubhava?:o您能解释一下如何更改请求吗?
变量表示Apache从浏览器接收到的原始请求,在执行某些重写规则后不会被覆盖。这个变量的示例值是
GET/index.php?id=123 HTTP/1.1
。所以需要其他apache规则来更改我的请求URI变量?怎么会这样?很抱歉,我只是真的很高兴/好奇到底发生了什么。这里唯一的问题是我不能再用胡萝卜验证了。在我的例子中,我使用^/类别。这是不可能的,因为它返回整个内容。通过执行以下操作来解决它:RewriteCond%{the_REQUEST}\w+\s/类别