rewritecond mod_rewrite enmod a2enmod mod-rewrite

mod-rewrite - enmod - mod_rewrite apache centos



Mod-rewrite Trailing Slash Issue (2)

No parece que haya mucha información sobre este tema, así que voy a describir mi problema específico, entonces tal vez podamos dar forma a la pregunta y la respuesta a algo un poco más universal.

Tengo esta regla de reescritura

RewriteEngine On RewriteBase /bookkeepers/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.+)/?$ index.php?franchise=$1

¿Cuál es el cambio de esta URL?

http://example.com/location/kings-lynn

En este

http://example.com/location/index.php?franchise=kings-lynn

El problema que tengo es que si agrego una barra inclinada

http://example.com/location/kings-lynn/

a continuación, la cadena de consulta se devuelve como

franchise=kings-lynn/

y por alguna razón, ninguno de mis archivos CSS y Javascript se están cargando.

¿Algunas ideas?


Como dijo @Paul Tomblin, el. + Está siendo codicioso; es decir, coincide tanto como puede.

^(.+[^/])/?$ le dice que coincida con algo, seguido de un carácter que no es /, seguido de un / opcional. Esto tiene el efecto de no capturar el final /.

La razón más probable por la que su CSS y Javascript no funciona es que está usando una ruta relativa, como src = "my.js". Cuando hay una barra inclinada, parece un directorio, por lo que su navegador buscará /location/kings-lynn/my.js. Puede solucionar esto simplemente usando una ruta absoluta a sus archivos (por ejemplo, /location/my.js).


Parece que el (. +) Está siendo codicioso. En ese caso, podrías intentar

RewriteRule ^(.+[^/])/?$ index.php?franchise=$1

Esto asegura que el primer grupo (entre paréntesis) no termine en una barra inclinada.