Apache mod_rewrite: ¿cómo manejar la barra diagonal en la URL?

Apache mod_rewrite: ¿cómo manejar la barra diagonal en la URL?

Tengo la siguiente estructura de URL:

http://mysite.com/movies/index.php?id=123

Quiero deshacerme de index.php?id=123 y en su lugar usar la siguiente URL:

http://mysite.com/movies/123

Se me ocurrió el siguiente .htaccess en el directorio /var/www/mysitecom/movies:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ mysitecom/movies/index.php?id=$1 [L,QSA]

Y funciona. Por ejemplo, cuando especifico...

http://mysite.com/movies/123

... Yo obtengo ...

http://mysite.com/movies/index.php?id=123

Los problemas comienzan cuando especifico...

http://mysite.com/movies/123/

Con esta barra, no manejo correctamente la URL. Parece que no especifiqué ninguna identificación y no se aplican todos mis estilos CSS.

Intenté jugar con expresiones regulares en la regla como...

RewriteRule ^([^/]+)[/]*$ mysitecom/movies/index.php?id=$1 [L,QSA]

... pero no ayudó.

Entonces mi pregunta es ¿cómo manejar la barra diagonal en mi caso? ¿Debo elegir mi regla de reescritura o necesito hacer algo más? Necesito asegurarme de quehttp://mysite.com/movies/123/se maneja exactamente de la misma manera quehttp://mysite.com/movies/123. ¿Alguna idea?

Gracias,

Actualizar:

UsuarioDSumskyme ayudó (abajo).

Dsumsky, Muchas gracias por su respuesta. Decidí comentar en forma de respuesta para poder formatear el texto.

En primer lugar, no pude habilitar el registro. Con estas cadenas en mi .htaccess...

RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3

... tengo el siguiente error:

Rewrite log not allowed here

Bueno, coloqué estas cadenas en /etc/apache2/apache2.conf y reinicié Apache. Se creó rewrite.log, pero se vacía incluso cuando se realiza la reescritura.

En segundo lugar, no funcionó en absoluto sin las siguientes cadenas:

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f

Entonces los agregué. Luego, algo salió mal con %{HTTP_HOST}, así que lo cambié un poco especificando una ruta:

RewriteRule ^([^/]*)/?$ mysitecom/movies/index.php?id=$1 [L]

Las cosas mejoraron. Con amboshttp://mysite.com/movies/123yhttp://mysite.com/movies/123/Veo la identificación aplicada. En el primer caso todo está completamente bien, pero en el último caso los estilos CSS no se aplican como si no estuvieran especificados en absoluto. No entiendo por qué sucede. Para mí, parece que los estilos se aplican ANTES de que se ejecute Rewrite Rule. Creo que sí porque vinculo estilos de la siguiente manera:

Entonces, parece que para /123 funciona, quiero decir, Apache puede encontrar ../library/main.css, pero para /123/ parece ser un directorio incrustado y ../library/main.css no No trabajo.

¿Algunas ideas?

Actualización 2:

Lo tengo. El .htaccess final:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RedirectMatch ^(.+[\d+])/$ $1
RewriteRule ^([^/]*)$ mysitecom/movies/index.php?id=$1 [L]

DSumsky, ¡Gracias por tu ayuda! Marco tu publicación como respuesta.

Respuesta1

Creé un VirtualHost de prueba para cumplir con sus requisitos y configuré la siguiente regla de reescritura que parece hacer lo que pretendía:

RewriteEngine On
RewriteLog "/var/log/httpd/rewrite.log"
RewriteLogLevel 3

RewriteCond %{HTTP_HOST} mysite\.com [NC]
RewriteRule ^/movies/([^/]*)/?$ %{HTTP_HOST}/movies/index.php?id=$1 [L]

La regla coincide con la última parte del URI, que es una especie de ID de película y elimina la barra diagonal si está allí.

Cuando no esté seguro de lo que sucede con respecto al motor de reescritura, habilite el registro como lo configuré. Puede inspeccionar cada paso que realizó el motor en ese momento y probar sus reglas correctamente.

Lo probé con las siguientes URL:

http://mysite.com/movies/123
http://mysite.com/movies/123/

Encontré las líneas correspondientes en el registro:

init rewrite engine with requested uri /movies/123
applying pattern '^/movies/([^/]*)/?$' to uri '/movies/123'
rewrite '/movies/123' -> 'mysite.com/movies/index.php?id=123'

init rewrite engine with requested uri /movies/123/
applying pattern '^/movies/([^/]*)/?$' to uri '/movies/123/'
rewrite '/movies/123/' -> 'mysite.com/movies/index.php?id=123'

información relacionada