web-dev-qa-db-ja.com

RewriteCond%{HTTP_COOKIE}をCookieの値と正確に一致させるにはどうすればよいですか?

ルールをCookieの正確な値に一致させるにはどうすればよいですか?私はもう試した:

RewriteCond %{HTTP_COOKIE} ^its=me$ [NC]

RewriteCond %{HTTP_COOKIE} its=^me$ [NC]

RewriteCond %{HTTP_COOKIE} its="me" [NC]

RewriteCond %{HTTP_COOKIE} its=me [NC] 

最後はほとんど機能しますが、「me2」のように、値の最後に余分なテキストがある場合に一致します。条件は、its Cookieの正確な値がmeで、前後に何もない場合にのみtrueになります。

これらの値はnotと一致する必要があります。

  • 君は
  • me2
  • [空の文字列]
  • 【クッキーが一切設定されていない】
6
Nick

もちろん、いくつかのCookieが存在する可能性があり、それらはURLエスケープされる可能性があり、比較が難しくなります。

このようなものはほとんどの場合に機能するはずです:

RewriteCond %{HTTP_COOKIE}     its=([^;]+) 
RewriteCond %1                 ^me$
RewriteRule ......

クッキーのエスケープを解除する必要がある場合は、そのためのリライトマップを追加できます。

RewriteMap unescape int:unescape

RewriteCond %{HTTP_COOKIE}     its=([^;]+) 
RewriteCond %{unescape:%1}     ^me$
RewriteRule ......
7

より複雑にする必要はありません

RewriteCond %{HTTP_COOKIE}     /^(.*;)?its=me(;.*)?$/

Cookieの値に特殊な(URLセーフではない)文字が含まれている場合、Krist van Besienのソリューションがおそらく最も効果的に機能することに注意してください。

4
Erwin Wessels

オンラインから docs

'= CondPattern'(辞書式に等しい)
[。 CondPatternが ""(2つの引用符)の場合、これはTestStringを空の文字列と比較します。

これは機能しますか?

RewriteCond %{HTTP_COOKIE} =its=me [NC]

1
dawud