.htaccess htaccess cookie值为目录重定向

.htaccess htaccess cookie值为目录重定向,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我有一个cookie name=dir和value=test。我希望htaccess检查该值是否作为目录存在,并基于该值重定向 RewriteCond /var/www/whatever/%{HTTP_COOKIE:dir} -d RewriteRule ^(.*)$ example.com [R] 我知道可以使用RewriteMap,但我无法访问conf文件,RewriteMaps必须在那里定义,而不是在htaccess中定义。纯mod_重写解决方案最好,因为setenv的模块也没有启用。我

我有一个cookie name=dir和value=test。我希望htaccess检查该值是否作为目录存在,并基于该值重定向

RewriteCond /var/www/whatever/%{HTTP_COOKIE:dir} -d
RewriteRule ^(.*)$ example.com [R]
我知道可以使用RewriteMap,但我无法访问conf文件,RewriteMaps必须在那里定义,而不是在htaccess中定义。纯mod_重写解决方案最好,因为setenv的模块也没有启用。我试过了,用谷歌搜索过,但没用


类似于%{HTTP:header}但对于COOKIE是理想的,但Apache不能做到这一点。

您必须在单独的重写中与%{HTTP\u COOKIE}进行匹配

RewriteCond %{HTTP_COOKIE} ^dir=(.+)$
RewriteCond /var/www/whatever/%1 -d
RewriteRule ^(.*)$ example.com [R]

@starkeen:我不知道我可以在RewriteCond中使用%1,以为它只用于RewriteRule。你的答案非常有效,除了两件事:

A.正则表达式%{HTTP_COOKIE}是一个字符串,在这种情况下可以有3种情况:

案例1:dir=abc-您的正则表达式有效

案例2:dir=abc;cookie1=v1-您的Rexex不工作

案例3:cookie1=v1;dir=abc;cookie2=v2-您的Rexex无法工作

同样重要的是:它可能类似于dir\u save=v1;x_dir=v2;dir=abs,所以

RewriteCond %{HTTP_COOKIE} ^.*dir=(.*).*$
也不行

所以。。。以[NEWLINE]或''开头;[SPACE]'并以[LINE-end]或“;”结尾

RewirteCond %{HTTP_COOKIE} (^|;\ )dir=(.*)(;|$)
RewriteCond %2 -d
RewriteRule ^(.*)$ example.com [R]
B.还要检查cookie dir的奇怪值,如空或“\”或“.”或“..”等。在原因为“\”的窗口上

RewirteCond %{HTTP_COOKIE} (^|\ ;)dir=(.*)(;|$)
# must be a directory
RewriteCond %2 -d
# must not be empty
RewriteCond %2 !^$
# must not contain dot
RewriteCond %2 !^.*\..*$
# must not contain /
RewriteCond %2 !^.*/.*$
# must not contain \
RewriteCond %2 !^.*\\.*$
RewriteRule ^(.*)$ example.com [R]
@所有人:很抱歉回答了我自己的问题(也starkeen展示了我不知道的一个重要部分),也很抱歉对正则表达式和奇怪的cookie值如此严格,但在最坏的情况下,这些事情可能会花费你数小时的时间。我已经准备好犯这样的错误,并通过艰苦的学习