Como faço RewriteCond% {HTTP_COOKIE} corresponder exatamente a um valor de cookie? [duplicado]

6

Como faço para que minha regra corresponda a um valor exato de um cookie? Eu tentei:

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

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

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

RewriteCond %{HTTP_COOKIE} its=me [NC] 

O último quase funciona, mas coincide quando o texto extra está no final do valor, como "me2". A condição deve ser verdadeira somente se o cookie its tiver um valor exato de me , com nada mais antes ou depois.

Estes valores não devem corresponder :

  • você
  • me2
  • [string vazia]
  • [o cookie não está definido de todo]
por Nick 14.04.2013 / 17:33

3 respostas

7

Pode haver, é claro, vários cookies, e eles podem ser escapados por URL, tornando as comparações complicadas.

Algo como isso deve funcionar na maioria dos casos:

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

Se você precisar cancelar o escape do cookie, adicione um reescrito para ele:

RewriteMap unescape int: unescape

RewriteCond %{HTTP_COOKIE}     its=([^;]+) 
RewriteCond %{unescape:%1}     ^me$
RewriteRule ......
    
por 15.04.2013 / 09:54
4

Não precisa ser mais complicado do que

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

Observe que, se o valor do cookie contiver caracteres especiais (não seguros para URL), a solução de Krist van Besien provavelmente funcionará melhor.

    
por 09.01.2014 / 14:44
1

Dos documentos on-line:

'=CondPattern' (lexicographically equal)
Treats the CondPattern as a plain string and compares it lexicographically to TestString.True if TestString is lexicographically equal to CondPattern (the two strings are exactly equal, character for character). If CondPattern is "" (two quotation marks) this compares TestString to the empty string.

Isso funciona?

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

    
por 14.04.2013 / 20:33