RewriteRule en .htaccess coincide con la primera instancia de cadena pero no con la cadena completa

Jun 12 2020

Estoy usando RewriteRule en mi .htaccess para hacer algunas redirecciones 301 en mi sitio web de Wordpress. Noté que si tengo una RewriteRule que es una continuación del mismo texto que otra regla, siempre coincide con la primera regla. ¿Cómo puedo solucionar esto para que solo coincida con la cadena completa?

Primera regla que funciona: RewriteRule ^/?ulock https://biketoeverything.com/2018/06/18/the-u-lock-to-buy/ [L,R=301,NC]

Segunda regla que siempre va a la publicación incorrecta (la de arriba): RewriteRule ^/?ulockbracket https://biketoeverything.com/2018/04/24/attach-any-u-lock-to-your-bike/ [L,R=301,NC]

Respuestas

1 anubhava Jun 13 2020 at 05:06

Cuando tienes regla como:

RewriteRule ^/?ulock ...
RewriteRule ^/?ulockbracket ...

Luego, el primer patrón coincide con cualquier URI que comience con el /ulockque también coincidirá, /ulockbracketpor lo que la segunda regla no se activará.

La solución es asegurarse de usar anclajes de expresiones regulares para garantizar que usamos una coincidencia precisa:

RewriteRule ^/?ulock/?$ https://biketoeverything.com/2018/06/18/the-u-lock-to-buy/ [L,R=301,NC] RewriteRule ^/?ulockbracket/?$ https://biketoeverything.com/2018/04/24/attach-any-u-lock-to-your-bike/ [L,R=301,NC]

o use un patrón coincidente más largo antes que uno más corto:

RewriteRule ^/?ulockbracket https://biketoeverything.com/2018/04/24/attach-any-u-lock-to-your-bike/ [L,R=301,NC]
RewriteRule ^/?ulock https://biketoeverything.com/2018/06/18/the-u-lock-to-buy/ [L,R=301,NC]