Pregunta

Estoy usando el filtro UrlReWrite de Tuckey ( http://www.tuckey.org/urlrewrite/ )

Ahora creé algunas reglas, pero hay un caso que me da dolores de cabeza. La url: /Group/1/Actualizar debe reescribirse como: /grupo? Id = 1 & Action = Update

Creé un patrón regexp para este caso: ^/grupo/([0-9]+)/( w*) $, pero el filtro no puede reescribirlo. No hay partido.

Dentro de mi caso de prueba ejecuté esta URL a través de todos mis patrones, solo para verificar. Y encontré el partido como esperaba.

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*)\\?(.*)+$") );

Entonces, ¿cómo es que el filtro no puede encontrar una regla?

Solo para incluir todo, aquí está mi urlrewrite.xml, o parte de él:

<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>

Adiós

Adrio

¿Fue útil?

Solución

Deberías usar una barra inalcadora única \ en lugar de doble invernastra \\.

<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>

En el código Java, la doble backalsh se usa para representar una sola barra invertida. Dado que la cadena se lee desde el archivo externo, no hay necesidad de escapar de la barra insegura.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top