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.