Url Rewrite Filter その8 ruleの並べ方試案
ruleとoutbound-ruleの順番はどうでもいいし、それぞれ交互になっても良い
ruleとoutbound-ruleは実行される箇所が違い、競合しないため。
typeがリダイレクトの類のto要素を持つruleは優先度の高いものから順に書いていく
ruleのurlパターンにもconditionにもマッチし、to要素がリダイレクト系だった場合は、
その場でリダイレクトが行われ(to要素のlast属性に関わらず)それ以降のruleが評価されないため。
run要素を使う場合は、同じrule上でset要素で実際にto要素を使うruleに一意になるようラベルを設定する
その6でやったような感じ。
attributeのnameをrewrited_hogeみたいのではなくて、
redirect_labelとかみたいな統一されたものにして、
値を実際にリダイレクトされるto要素を持つruleに対して一意に設定する。
具体的にはこんな感じ↓
<!-- rule1,rule2に合致した場合はredirect_rule1でリダイレクトさせたい --> <rule> <name>rule1</name> <condition type="parameter" name="param1" operator="equal">A</condition> <from>.*/ActionA\?.*</from> <run class="SomeClass" method="doSomeMethod" /> <set name="redirect_label">label1</set> </rule> <rule> <name>rule2</name> <condition type="parameter" name="param2" operator="equal">B</condition> <from>.*/ActionB\?.*</from> <run class="SomeClass" method="doSomeMethod" /> <set name="redirect_label">label1</set> </rule> <rule> <name>redirect_rule1</name> <condition type="attribute" name="redirect_label" operator="equal">label1</condition> <from>.*/.*</from> <to type="redirect">/ActionC?param1=E&param2=F&param3=%{attribute:rewrited_param3}</to> </rule> <!-- %{attribute:redirect_label}==label1、 %{attribute:rewrited_param3}==(doSomeMethodで設定された値) というattributeの汚染はここで止まる -->
↑のようなルールのセットを交差させずに並べていけば、
変な影響が出てしまうことを気にしなくても良くなります。
typeがforwardのruleについてはちょい調査が必要です。