如何让我的规则与 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”)时,该条件才会匹配。只有当 cookie 的its
确切值为时,条件才为真me
,前后没有其他内容。
这些价值观应该不是匹配:
- 你
- 我2
- [空字符串]
- [根本没有设置 cookie]
答案1
当然可能会有多个 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 ......
答案2
它不需要比
RewriteCond %{HTTP_COOKIE} /^(.*;)?its=me(;.*)?$/
请注意,如果 cookie 值包含特殊(非 URL 安全)字符,Krist van Besien 的解决方案可能效果最佳。
答案3
来自网上文档:
'=CondPattern' (按字典顺序相等)
将 CondPattern 视为纯字符串,并按字典顺序将其与 TestString.True 进行比较,如果 TestString 按字典顺序等于 CondPattern(两个字符串完全相等,字符对字符)。如果 CondPattern 为“”(两个引号),则将 TestString 与空字符串进行比较。
这有用吗?
RewriteCond %{HTTP_COOKIE} =its=me [NC]