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&amp;param2=F&amp;param3=%{attribute:rewrited_param3}</to>
</rule>
<!-- %{attribute:redirect_label}==label1、
    %{attribute:rewrited_param3}==(doSomeMethodで設定された値)
    というattributeの汚染はここで止まる
    -->

↑のようなルールのセットを交差させずに並べていけば、
変な影響が出てしまうことを気にしなくても良くなります。


typeがforwardのruleについてはちょい調査が必要です。