2016-03-31 8 views
0

私はクッキー名= dirとvalue = testを持っています。 htaccessにその値がディレクトリとして存在し、それに基づいてリダイレクトされているかどうかをチェックします。htaccessのクッキー値はディレクトリリダイレクト

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

は、私はそれがRewriteMap命令で可能でしょうけど、私はconfファイルとRewriteMapsへのアクセスがないhtaccessファイルで、そこに定義されていないする必要があります持っています。純粋なmod_rewriteソリューションは、setenv用のモジュールも有効になっていないため、最適です。私は試して、グーグルではなく、役に立たない。

%{HTTP:header}のようなものがありますが、Cookieは理想的ですが、Apacheはそれをしません。

答えて

0

あなたは別々のRewriteCondで%{HTTP_COOKIE}に対して

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

@starkeenと一致する必要があります:私は私がするRewriteCond%1を使用することができることを知らなかった、それが唯一のRewriteRuleのためだと思いました。あなたの答えは完全に2つの事のために実行されます:

A. Regex。

ケース1:%{HTTP_COOKIE}はこのような状況で3例を有することができる文字列である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は私が気付いていなかった重要な部分を示しました)正規表現と奇妙なクッキーの値がありますが、最悪の場合にはこのようなことは時間を浪費します。私はすでにそのような間違いを犯し、難しい方法を学んだ。