我如何使我的规则匹配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的确切值时,在之前或之后没有更多的东西。
这些值不应该匹配:
当然可以有几个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]