Назад | Перейти на главную страницу

Как заставить 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, ни до, ни после.

Эти значения должны не соответствие:

Конечно, может быть несколько файлов cookie, и они могут быть экранированы, что затрудняет сравнение.

В большинстве случаев должно работать что-то вроде этого:

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

Если вам нужно отменить экранирование файла cookie, вы можете добавить для этого карту перезаписи:

RewriteMap unescape int: unescape

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

Это не должно быть сложнее, чем

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

Обратите внимание, что если значение cookie содержит специальные (не URL-безопасные) символы, решение Криста ван Бесиена, вероятно, работает лучше всего.

Из Интернета документы:

'= CondPattern' (лексикографически равно)
Обрабатывает CondPattern как простую строку и сравнивает ее лексикографически с TestString.True, если TestString лексикографически равна CondPattern (две строки точно равны, символ за символом). Если CondPattern равен "" (две кавычки), TestString сравнивается с пустой строкой.

Это работает?

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