在.htaccess中,HTTP_COOKIE是否被视为单个字符串?
如果cookie未设置为特定值,我想阻止对文件夹的访问在.htaccess中,HTTP_COOKIE是否被视为单个字符串?,.htaccess,cookies,.htaccess,Cookies,如果cookie未设置为特定值,我想阻止对文件夹的访问 RewriteEngine On RewriteCond %{HTTP_COOKIE} !some-cookie-name=some-cookie-value [NC] RewriteRule .* /some-sort-of-error/ [NC,L,R=301] 它似乎接受cookie名称和值,并将其视为字符串cookie name=cookie value。它似乎只检查此字符串是否包含cookie name=cookie value
RewriteEngine On
RewriteCond %{HTTP_COOKIE} !some-cookie-name=some-cookie-value [NC]
RewriteRule .* /some-sort-of-error/ [NC,L,R=301]
它似乎接受cookie名称和值,并将其视为字符串cookie name=cookie value
。它似乎只检查此字符串是否包含cookie name=cookie value
,而不是与之相等
因此,在上面的示例中,如果cookie名称为foo some cookie name
和/或值为some cookie value foo
则授予对文件夹的访问权
这是正常的行为还是有什么办法使其完全匹配?HTTP\u COOKIE
是整个COOKIE数组作为单个字符串的串联吗
有没有办法让它完全匹配
确保您可以使用此增强的正则表达式来确保不匹配所需的文本:
RewriteCond %{HTTP_COOKIE} !(^|\s)some-cookie-name=some-cookie-value(;|$) [NC]
RewriteRule ^ /some-sort-of-error/ [NC,L,R=301]
多个cookie之间用分号和空格分隔。谢谢,(^ |\s)和(;|$)到底做什么?这就是regex<代码>(^ |\s)表示匹配线起点或空格<代码>(;|$)表示匹配
代码>或行尾。很好的解释。因此,我从tat表中推断HTTP_COOKIE是一个字符串,每个COOKIE在其自己的行上,是吗?不是在单独的行上,而是多个COOKIE由分号和空格分隔。只需否定即可(请参见条件中更新的答案,带!
)