Java Urlrewrite -Filter kann kein Match finden
-
25-10-2019 - |
Frage
Ich benutze den Urlrewrit -Filter von Tuckey ( http://www.tuckey.org/urlrewrite/ )
Jetzt habe ich einige Regeln erstellt, aber es gibt einen Fall, der mir Kopfschmerzen gibt. Die URL: /Gruppe/1/Update sollte umgeschrieben werden wie: /Gruppe? ID = 1 & action = Update
Ich habe ein Regexp -Muster für diesen Fall erstellt: ^/Group/([0-9]+)/( W*) $, aber der Filter kann ihn nicht umschreiben. Es gibt kein Match.
In meinem Testgezug habe ich diese URL durch alle meine Muster geleitet, um zu überprüfen. Und ich fand das Match wie erwartet.
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*)\\?(.*)+$") );
Wie kommt es, dass der Filter keine Regel finden kann?
Nur um alles einzubeziehen, hier ist meine urlrewrite.xml oder ein Teil davon:
<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&action=show</to>
</rule>
<rule>
<from>^/group/([0-9]+)/(\\w*)$</from>
<to>/group?id=$1&action=$2</to>
</rule>
<rule>
<from>^/group/([0-9]+)/(\\w*)\\?(.*)+$</from>
<to>/group?id=$1&action=$2&$3</to>
</rule>
Wiedersehen
Adrian
Lösung
Sie sollten einzelne Backslash verwenden \
anstelle von doppeltem Backslash \\
.
<rule>
<from>^/group/([0-9]+)/(\w*)$</from>
<to>/group?id=$1&action=$2</to>
</rule>
<rule>
<from>^/group/([0-9]+)/(\w*)\?(.*)+$</from>
<to>/group?id=$1&action=$2&$3</to>
</rule>
Im Java -Code wird der Doppel -Backalsh verwendet, um einen einzelnen Backslash darzustellen. Da die Zeichenfolge aus der externen Datei gelesen wird, ist die Flucht durch den Backslash nicht erforderlich.