2

tuckey ( http://www.tuckey.org/urlrewrite/ )の URLRewrite Filter を使用しています。

いくつかのルールを作成しましたが、頭痛の種が 1 つあります。URL: /group/1/updateは次のように書き換える必要があります: /group?id=1&action=update

この場合の正規表現パターンを作成しました: ^/group/([0-9]+)/(\w*)$ですが、フィルターはそれを書き換えることができません。一致するものはありません。

TestCase 内で、この URL をすべてのパターンで実行して確認しました。そして、私は予想通りに一致を見つけました。

assertFalse( "/group/1/update".matches("^/group/create$") );
assertFalse( "/group/1/update".matches("^/group/save$") );
assertFalse( "/group/1/update".matches("^/group/([0-9]+)/?$") );
assertTrue( "/group/1/update".matches("^/group/([0-9]+)/(\\w*)$") );
assertFalse( "/group/1/update".matches("^/group/([0-9]+)/(\\w*)\\?(.*)+$") );

では、フィルタがルールを見つけられないのはなぜでしょうか?

すべてを含めるために、ここに私の urlrewrite.xml またはその一部を示します。

<rule>
    <from>^/group/create$</from>
    <to>/group?action=create</to>
</rule>
<rule>
    <from>^/group/save$</from>
    <to>/group?action=save</to>
</rule>
<rule>
    <from>^/group/([0-9]+)/?$</from>
    <to>/group?id=$1&amp;action=show</to>
</rule>
<rule>
    <from>^/group/([0-9]+)/(\\w*)$</from>
    <to>/group?id=$1&amp;action=$2</to>
</rule>
<rule>
   <from>^/group/([0-9]+)/(\\w*)\\?(.*)+$</from>
    <to>/group?id=$1&amp;action=$2&amp;$3</to>
</rule>

さよなら

エイドリアン

4

1 に答える 1

1

\2 つのバックスラッシュではなく、1 つのバックスラッシュを使用する必要があります\\

<rule>
    <from>^/group/([0-9]+)/(\w*)$</from>
    <to>/group?id=$1&amp;action=$2</to>
</rule>
<rule>
    <from>^/group/([0-9]+)/(\w*)\?(.*)+$</from>
    <to>/group?id=$1&amp;action=$2&amp;$3</to>
</rule>

Java コードでは、1 つのバックスラッシュを表すために 2 つの backalsh が使用されます。文字列は外部ファイルから読み込まれるため、バックスラッシュをエスケープする必要はありません。

于 2011-11-29T21:52:11.717 に答える