我有一个页面,我在其中设置了一个名为“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]