Как сделать так, чтобы мое правило соответствовало точному значению файла 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]