如何使 RewriteCond %{HTTP_COOKIE} 与 cookie 值完全匹配?

如何使 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”)时,该条件才会匹配。只有当 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]

相关内容