2010-02-03 15 views
5

tengo que incluir un forwardslash final opcional, eso es una /, en mi RewriteRuleexpresión regular .htaccess necesitan hacer barra inclinada opcional

Lo que tengo hasta ahora es

RewriteRule ^([a-zA-Z0-9]+)$ u.php?$1|$2 

que funciona muy bien , por ejemplo http://foo.bar/abcde redirigirá a http://foo.bar/u.php?abcde y maneja cualquier parámetro de cadena de consulta que pueda estar presente.

Lo que necesito hacer es tomar http://foo.bar/abcde/ (con la forwardslash final) y redirigir a http://foo.bar/u.php?abcde

lo tanto, si su presente, necesito quitar la barra diagonal final a partir de $ 1 en mi RewriteRule. ¿Cómo hago esto? Soy nuevo en apache y he probado muchas reglas diferentes de expresiones regulares, pero no puedo hacerlo bien.

Respuesta

14

sólo hay que poner /? antes de la $ al final de su patrón:

RewriteRule ^([a-zA-Z0-9]+)/?$ u.php?$1 

pero prefiero sugerir que usted pueda permitir sólo una ortografía (ya sea con o sin barra final) y redirigir el otro:

# remove trailing slash 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*)/$ /$1 [L,R=301] 
# add trailing slash 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .*[^/]$ /$0/ [L,R=301] 
+0

@Phil: No, eso no es posible. Lo único que puede hacer es eliminarlo o agregarlo a todas las solicitudes. – Gumbo

+0

En realidad, para lo que intento lograr tiene más sentido permitir ambas ortografías, así que voy a usar dos reglas de reescritura por ahora, hasta que entienda completamente lo que sugirió con 'RewriteCond'. – Phil

+1

@Phil: Las dos condiciones solo evitan redirigir las solicitudes que se pueden asignar a los directorios existentes ('-d') oa los archivos existentes (' -f'). – Gumbo

Cuestiones relacionadas