1

これらの書き換えルールは機能していないようです。それは不可能ですか、それとも何か不足していますか

問題のあるルールは 2 番目のルールです。後方参照 %1 に注意してください

RewriteCond %{REQUEST_URI} ^/([a-zA-Z\.]+)/.*$ [NC]
RewriteCond %{HTTP_COOKIE} route_controller_%1=([^;]+) [NC]
RewriteRule ^(.*)$ http://example2.com/%1/_/$1 [L]

これが私が期待していることです。URLを指定すると

http://example.com/abc/home

最初のルールは %1 に abc を保存する必要があります。route_controller_abc という Cookie の 2 番目のルールが必要です。見つかった場合、3 番目のルールは次のように書き換えられます。

http://example2.com/thevalueofthecookie/_/home

しかし、seconf ルールは %1 後方参照を使用していないようです。

何か案は?

4

1 に答える 1

2

これは、文字列置換が cond の最初のパラメーターでのみ発生し、その rexexp では発生しないためです。\1etcを使用して正規表現のパラメーターをシミュレートするには、ハックを行う必要があります。

実行順序がルール正規表現、条件 1、条件 2、... ルール置換であるため、ルール正規表現でディレクトリを取得することもできます。例えば。^(*.?)/.*$forabc/homeは に設定さ$1abc、$0は に設定されabc/homeます。したがって、私は次のようなことを試します:

RewriteCond $1:%{HTTP_COOKIE} ^(.*?):.*\broute_controller_\1=([^;]+) [NC]
RewriteRule ^(*.?)/.*$        http://example2.com/%2/_/$0            [L]

%1 は cond 正規表現でディレクトリをバインドするために使用されるため、コントローラーは現在 %2 にあることに注意してください。

これがあなたの直接の質問に役立ち、答えてくれることを願っています。私がこれを行っていた場合、パラメーターの検証を強化するか、([^;]+)これを小さな PHP リダイレクタ スクリプトに移動して、そこで検証を行います :-)

于 2012-06-11T13:42:52.207 に答える