HTACCESS无法使用rewriteCond

时间:2013-11-14 13:23:24

标签: regex .htaccess mod-rewrite

我有一个页面,我设置了一个名为“utm”的cookie,其中包含每个用户的IP。

之后,用户访问另一个页面,我想检查是否设置了cookie“utm”,以及cookie的值是否是用户的IP。这很简单,但我不能让它起作用。

RewriteEngine On
RewriteCond %{HTTP_COOKIE} ^.*utm=([^;]*)$
RewriteCond %{REMOTE_ADDR} !^%1$
RewriteRule .* error.html [L]

问题是,即使cookie的值是IP,用户也总是被弹出到error.html。最奇怪的是,如果我测试它明确我的IP它的工作原理:

RewriteEngine On
RewriteCond %{HTTP_COOKIE} ^.*utm=([^;]*)$
RewriteCond %{REMOTE_ADDR} !^111.222.111.222$
RewriteRule .* error.html [L]

所以,当我把我的IP放在正则表达式中时,我没有被驱逐到error.html并且一切正常但是当我不知道我的IP并且使用%1而不是它甚至没有工作,即使是具有我的IP的cookie也没有以下。


修改

在anubhava先生的帮助下,我得到了以下代码。但是当cookie中包含的IP与真实用户的IP不同时,它仍然不起作用:

RewriteEngine On

RewriteCond %{REQUEST_URI} !(/index\.php|/teste\.php|/)$
RewriteCond %{HTTP_COOKIE} !^.*utm=([^;]*).*$ [OR]
RewriteCond %{HTTP_COOKIE}:%{REMOTE_ADDR} ^.*utm=([^;]*).*:(?!\1)$
RewriteRule .* - [G,L]

2 个答案:

答案 0 :(得分:1)

不起作用,因为%1的{​​{1}}上的RewriteCond是不允许的。

你可以这样做:

RewriteEngine On

RewriteCond %{HTTP_COOKIE} utm=([^;]*)$ [NC]
RewriteCond %{HTTP_COOKIE}::%{REMOTE_ADDR} utm=([^;]+).*?::(?!\1).*$ [NC]
RewriteRule ^ error.html [L]

答案 1 :(得分:0)

在anubhava的帮助下,我想出来并解决了我的问题!代码必须是:

RewriteCond %{REQUEST_URI} !(/index\.php|/teste\.php|/)$
RewriteCond %{HTTP_COOKIE} !^.*utm=([^;]*).*$ [OR]
RewriteCond %{HTTP_COOKIE}:%{REMOTE_ADDR} ^.*utm=([^;]*).*:(?!\1).*$
RewriteRule .* - [G,L]