我有一个cookie name = dir和value = test。我希望htaccess检查该值是否作为目录存在并基于此重定向。
RewriteCond /var/www/whatever/%{HTTP_COOKIE:dir} -d
RewriteRule ^(.*)$ example.com [R]
我知道可以使用RewriteMap,但是我无法访问conf文件,必须在那里定义RewriteMaps,而不是在htaccess中。一个纯mod_rewrite解决方案是最好的,因为setenv的模块也没有启用。我试过用Google搜索,但无济于事。
像%{HTTP:header}之类的东西,但对于cookie来说是理想的,但Apache并不这样做。
答案 0 :(得分:0)
您必须在单独的RewriteCond中与%{HTTP_COOKIE}匹配
RewriteCond %{HTTP_COOKIE} ^dir=(.+)$
RewriteCond /var/www/whatever/%1 -d
RewriteRule ^(.*)$ example.com [R]
答案 1 :(得分:0)
@starkeen:我不知道我可以在RewriteCond中使用%1,认为它只适用于RewriteRule。你的答案完全适用于两件事:
一个。正则表达式。 %{HTTP_COOKIE}是一个字符串,在这种情况下可以有3个案例:
案例1: dir = abc - 您的正则表达式
案例2: dir = abc; cookie1 = v1 - 您的Rexex不起作用
案例3: cookie1 = v1; DIR = ABC; cookie2 = v2 - 您的Rexex不起作用
同样重要的是:它可能类似于 dir_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目录的奇怪值,例如空或'\'或'。'或'.. \'等等。在Windows上的原因'\'...
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]
@all:很抱歉回答我自己的问题(同时 starkeen显示了一个至关重要的部分我不知道)并且对于正则表达式和奇怪的cookie值如此严格而感到遗憾,但是这样的事情在最糟糕的情况下,你可能需要花费数小时才能摆脱困境。我已经犯过这样的错误并且努力学习。