¿Cómo puedo convertir esta regla de reescritura de Apache en una regla UrlRewriteFilter Tuckey?
-
01-10-2019 - |
Pregunta
tengo la siguiente regla de reescritura de Apache
<IfModule rewrite_module>
RewriteEngine on
RewriteMap tolowercase int:tolower
RewriteCond $2 [A-Z]
RewriteRule ^(.*)/(.*).html$ $1/${tolowercase:$2}.html [R=301,L]
</IfModule>
que cambia esto:
http://localhost.localdomain.com/FooBarBaz.html
a esto:
http://localhost.localdomain.com/foobarbaz.html
Me gustaría portarlo a este tuckey.org de reescritura de URL Filter .
¿Qué es una norma equivalente que podría utilizar para hacer que el URL en minúsculas? Me interesa sobre todo en la manera de formar el elemento de condición.
Aquí está mi primer corte en la regla, pero no funciona, incluso sin la condición:
<rule>
<name>Force URL filenames to lower case</name>
<from>^(.*)/(.*).html$</from>
<to type="permanent-redirect" last="true">$1/${lower:$2}.html</to>
</rule>
Solución
Esto es lo que finalmente se estableció en:
<rule match-type="regex">
<name>Force URL filenames to lower case</name>
<condition type="request-uri" casesensitive="false" operator="notequal">^.*/a4j.*$</condition>
<condition type="request-uri" casesensitive="true">^.*/.*[A-Z].*.html$</condition>
<from>^(.*)/(.*).html$</from>
<to type="permanent-redirect" last="true">$1/${lower:$2}.html</to>
</rule>
La primera condición es evitar que la regla se ejecute en las solicitudes a4j AJAX.
Otros consejos
Sean,
Usted no necesita una condición para hacer esto (exceptuando el caso omiso de las llamadas AJAX). Más importante aún, el elemento de condición no tiene un casesensitive atributo , sólo el elemento de hace. Una vez que me di cuenta de esto, yo era capaz de escribir la regla como:
<rule match-type="regex">
<note>Force URL to lower case</note>
<from casesensitive="true">^.*[A-Z].*$</from>
<to type="permanent-redirect" last="true">${lower:$0}</to>
</rule>
NOTA: Esto funciona para toda la solicitud de surco (aunque no la cadena de consulta).
Me tropezó con su puesto porque la regla de filtro de reescritura de URL se me dio que se parecía mucho a la suya no estaba funcionando. A través de una tonelada de ensayo y error, al final me di cuenta de que el problema no era con la expresión regular en absoluto. Era que era a juego, pero era no mayúsculas y minúsculas, por lo que estaba recibiendo redirecciones infinitas.