複数のRewriteCondを連結すると、最後のRewriteCondのキャプチャグループのみが%0
- %9
で参照できます。RewriteRule内の複数のRewriteCondの参照キャプチャグループ
次の問題では、URLのクエリ文字列のパラメータは任意の順序で指定できます。派手なURLにそれらを解析するために、私は個別にクエリ文字列内の各パラメータと一致する必要があります:
RewriteCond %{QUERY_STRING} param1=([^&]+)
RewriteCond %{QUERY_STRING} param2=([^&]+)
RewriteCond %{QUERY_STRING} param3=([^&]+)
RewriteRule ^foo$ bar/%1/%2/%3/ [R]
私は指摘のように...これは動作しません。この問題を解決するために、私は次のRewriteCondで、前のRewriteCondのキャプチャグループを参照する可能性があり、実際のRewriteRuleに各パラメータを「伝播」:
RewriteCond %{QUERY_STRING} param1=([^&]+)
RewriteCond %1&%{QUERY_STRING} ^([^&]*)&.*param2=([^&]+)
RewriteCond %1&%2&%{QUERY_STRING} ^([^&]*)&([^&]*)&.*param3=([^&]+)
RewriteRule ^foo$ bar/%1/%2/%3/ [R]
これは動作するはずですが、それぞれの追加のパラメータのためには、メシエのを取得します。他の解決方法は、1つのパラメータを解析し、各パラメータの後にクライアントをリダイレクトすることができます(リダイレクトのチェーンが長くなりますので避けたい)。
はするRewriteRule内のすべてのRewriteCond年代のキャプチャグループにアクセスするためのクリーンな方法(例えば、私はどこか別の場所にそれらを参照することができますので、それらに名前を付けたり、変数に割り当てることが可能ですか?)あり
+1を。私はこの問題にも直面しており、答えを知りたいと思っています – anubhava
mod_rewriteのドキュメントでは、RewriteCondの逆参照は、現在の条件セットで**最後に一致したRewriteCond **を保持するだけなので、このルートでのみ答えます。その複雑さを考えると、GETやPOSTを解析する 'foo'でスクリプトを設定し、適切な' bar'にリダイレクトすることを考えましたか? – miah