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