Url Rewrite Filter その6 なんかキモイ現象
<rule> <condition type="parameter" name="hoge" operator="equal">HOGE</condition> <from>.*/hogehoge\?.*</from> <run class="Fugafuga" method="doSomeMethod" /> <!-- doSomeMethodにてパラメタfugaを変換して、attribute・rewrited_fugaに格納 今回は"fugafuga"が入るとする。 --> <set name="rewrited_hoge">HO</set> </rule> <rule> <condition type="attribute" name="rewrited_hoge" operator="equal">HO</condition> <from>.*</from> <to type="redirect">/piyopiyo?hoge=HO&fuga=%{attribute:rewrited_fuga}</to> </rule>
こんな感じでルールを記述してやれば、
http://thisDomain/hogehoge?hoge=HOGE&fuga=FUGA
みたいなURLから
http://thisDomain/piyopiyo?hoge=HO&fuga=fugafuga
にリダイレクトできると思うんだけど、実際には
http://thisDomain/piyopiyo?hoge=HO&fuga=fugafuga/piyopiyo?hoge=HO&fuga=fugafuga
こんな感じになっちゃう。
どうもorg.tuckey.web.filters.urlrewrite.RuleBaseに問題があるみたいで、
executeBaseメソッドで、%{}と変数を置換した後、
本来必要のない正規表現の後方参照置換をやろうとして変なことになってるみたい。
2つ目のルールのfromをこんな感じにすると
<from>.*.*</from>
解消されたけど、具体的なところがわからないと気持ち悪いなあ。
2007/06/29訂正
問題が解消されるルールはこっちでした。
<from>.*/.*</from>