2008-11-24 9 views
5

No parece haber mucha información sobre este tema, así que voy a describir mi problema específico, entonces quizás podamos dar forma a la pregunta y la respuesta a algo un poco más universal.Mod-Rewrite Trailing Slash Issue

que tienen 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 este URL

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

en éste

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

El problema que estoy teniendo es que si añado un arrastre barra

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

continuación, la cadena de consulta se devuelve como

franchise=kings-lynn/ 

y por alguna razón ninguno de mis archivos CSS y Javascript están siendo cargados.

¿Alguna idea?

+0

He publicado una respuesta sobre la coincidencia de expresiones regulares. Para solucionar el problema de CSS/Javascript, debe consultar el registro del servidor para ver qué se solicita. Puede que tenga que agregar una [R, L] a esa RewriteRule, pero nunca entendí esa parte. –

Respuesta

10

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

^(.+[^/])/?$ dice que coincida con algo, seguido de un carácter que no es /, seguido de un /. 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á utilizando 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 de acceso absoluta a sus archivos (por ejemplo, /location/my.js).

6

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

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

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

+0

Agradable. Esto solucionó mi problema de corte final (pero no la falta de problema de CSS). Supongo que no podría hablar sobre cómo funciona esto, ¿verdad? – Binarytales

+0

La expresión regular coincide con un grupo que consta de 1 o más caracteres, seguido de cualquier carácter que no sea una barra inclinada. Fuera del grupo, está haciendo coincidir opcionalmente una barra inclinada. Antes de mi cambio, la barra podría haber terminado en el grupo. –