如何使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的确切值时,在之前或之后没有更多的东西。

这些值不应该匹配:

  • ME2
  • [空string]
  • [cookie根本没有设置]

当然可以有几个cookie,他们可以被URL转义,比较棘手。

像这样的东西应该在大多数情况下工作:

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

如果你需要使用cookie,你可以添加一个rewritemap:

RewriteMap unescape int:unescape

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

它不需要比这更复杂

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

请注意,如果Cookie值包含特殊的(不是URL安全的)字符,则Krist van Besien的解决scheme可能效果最好。

从在线文档 :

'= CondPattern'(词典上相同)
将CondPattern视为一个纯string,并按照字典顺序将其与TestString.True进行比较,如果TestString按字典顺序等于CondPattern(两个string完全相同,则为字符字符)。 如果CondPattern是“”(两个引号),则将TestString与空string进行比较。

这是否工作?

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