2008-11-24 9 views
2

J'ai cette règle de réécrituremanigances Mod-rewrite

RewriteEngine On 
RewriteBase /location/ 
RewriteRule ^(.+)/?$ index.php?franchise=$1 

Ce qui est supposé changer cette URL

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

dans celui-ci

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

Mais au lieu que je reçois ce

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

De plus, l'ajout d'une barre oblique la casse. Je reçois la page index.php, mais aucune feuille de style ou javascript ne se charge.

Je suis clairement en train de faire quelque chose de très mal mais je n'ai aucune idée de ce que malgré avoir passé toute la journée R'ingTFM et de nombreux amorces en ligne et des tutoriels et des questions sur ici.

+0

http://stackoverflow.com/questions/286004/hidden-features-of-modrewrite –

Répondre

5

Votre problème est que vous redirigez deux fois.

'location/index.php' correspond à la regex ^(.+)/?$

Vous voulez utiliser peut-être le « si le fichier n'existe pas » sous condition de le faire essayer de ne pas mapper une deuxième fois.

RewriteEngine on 
RewriteBase /location/ 
RewriteCond %{REQUEST_FILENAME} !-f # ignore existing files 
RewriteCond %{REQUEST_FILENAME} !-d # ignore existing directories 
RewriteRule ^(.+)/?$ index.php?franchise=$1 [L,QSA] 

Et additonally, theres [L, QSA] qui tente d'en faire la « dernière » règle (Note, ce n'est pas tout à fait évident comment cela fonctionne) et ajoutez la chaîne de requête à la requête, de sorte que

location/foobar/?baz=quux ==> index.php?franchise=$1&baz=quux 

(je pense)

3

Il me semble que si le filtre est en cours d'exécution rewrite deux fois. Essayez d'ajouter un dernier drapeau

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

Votre règle s'auto-associe, et par conséquent, elle fait référence à elle-même.