1

我有一个页面,我在其中设置了一个名为“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 时,即使 cookie 具有我的 IP 并且仅此而已,它也不起作用。


编辑

在 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]
4

2 回答 2

1

不工作,因为%1在 RHS 上RewriteCond是不允许的。

你可以这条规则:

RewriteEngine On

RewriteCond %{HTTP_COOKIE} utm=([^;]*)$ [NC]
RewriteCond %{HTTP_COOKIE}::%{REMOTE_ADDR} utm=([^;]+).*?::(?!\1).*$ [NC]
RewriteRule ^ error.html [L]
于 2013-11-14T13:40:59.693 回答
0

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

RewriteCond %{REQUEST_URI} !(/index\.php|/teste\.php|/)$
RewriteCond %{HTTP_COOKIE} !^.*utm=([^;]*).*$ [OR]
RewriteCond %{HTTP_COOKIE}:%{REMOTE_ADDR} ^.*utm=([^;]*).*:(?!\1).*$
RewriteRule .* - [G,L]
于 2013-11-14T14:59:28.333 回答