1

各ユーザーの IP を含む「utm」という名前の Cookie を設定するページがあります。

その後、ユーザーは別のページにアクセスし、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]
4

2 に答える 2

1

%1の右辺が許可されていないため、機能していませ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 に答える