RewriteRule en .htaccess coincide con la primera instancia de cadena pero no con la cadena completa
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
Cuando tienes regla como:
RewriteRule ^/?ulock ...
RewriteRule ^/?ulockbracket ...
Luego, el primer patrón coincide con cualquier URI que comience con el /ulock
que también coincidirá, /ulockbracket
por 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]