繁体   English   中英

HTACCESS无法与rewriteCond一起使用

[英]HTACCESS not working with rewriteCond

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

无法使用,因为不允许在RewriteCond RHS上使用%1

您可以使用以下规则:

RewriteEngine On

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM