request_uri http_host htaccess examples conditions regex url rewrite

regex - http_host - Regla de reescritura de Apache que funciona con o sin una barra diagonal final



url rewrite request_uri (4)

Estoy tratando de redireccionar una serie de URL estáticas, y quiero que funcione ya sea que la barra diagonal final esté presente o no:

/foo/bar ---> /tacos /foo/bar/ --> /tacos

He intentado lo siguiente y todo tipo de variaciones, pero siempre obtengo una coincidencia solo con la barra diagonal actual:

RewriteRule ^foo/bar?/$ http://url.com/tacos RewriteRule ^foo/bar(?/)$ http://url.com/tacos RewriteRule ^foo/bar*/$ http://url.com/tacos RewriteRule ^foo/bar(*/)$ http://url.com/tacos

Siento que me falta algo obvio. ¿Ayuda?


Aparte de en EBNF o ABNF , un cuantificador en expresiones regulares se refiere a la expresión anterior y no a la siguiente. Asi que:

RewriteRule ^foo/bar/?$ http://url.com/tacos


Esto también funciona: RedirectMatch 301 /foo/bar(/.*|$) http://url.com/tacos


Si quieres hacer coincidir foo / bar independientemente de si va seguido de otra parte de la ruta, puedes decir:

RewriteRule ^foo/bar(/.*|$) http://url.com/tacos

Esto coincidirá con cualquiera de los siguientes:

foo/bar foo/bar/ foo/bar/baz

Significa: que coincida con a) una barra inclinada seguida de 0 o más caracteres, o b) el final de la cadena.

Por otro lado, estos podrían ser indeseables:

RewriteRule ^foo/bar/? http://url.com/tacos # This also matches foo/barb RewriteRule ^foo/bar/?$ http://url.com/tacos # This will not match foo/bar/baz


Tratar

RewriteRule ^foo/bar/?$ http://url.com/tacos