2014-08-29 17 views
0

我想要阻止訪問一個文件夾,如果一個cookie未設置爲特定的值。在.htaccess中HTTP_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而不是等於

所以在上面如果cookie名稱是foo-some-cookie-name和/或值是some-cookie-value-foo訪問該文件夾被授予。

這是正常的行爲還是有什麼辦法讓它完全匹配? HTTP_COOKIE整個cookie數組作爲單個字符串連接在一起嗎?

回答

2

有沒有什麼辦法讓它完全匹配

當然你可以用這個增強的正則表達式,以確保沒有想要的文本匹配:

RewriteCond %{HTTP_COOKIE} !(^|\s)some-cookie-name=some-cookie-value(;|$) [NC] 
RewriteRule^/some-sort-of-error/ [NC,L,R=301] 

多個Cookie被分隔一個半結腸和一個空間。

+0

謝謝,(^ | \ s)和(; | $)確實做了什麼? – texelate 2014-08-29 08:23:05

+0

這是正則表達式。 '(^ | \ s)'表示匹配線的開始或空格。 '(; | $)'表示匹配';'或行結束。 – anubhava 2014-08-29 08:25:08

+0

這個工作適合你嗎? – anubhava 2014-08-29 08:30:17

相關問題