2009-05-07 8 views
0

Je viens de faire une nouvelle installation de pile de lampe sur Ubuntu et activé le module mod_rewrite pour mon site Web par défaut. Ce que je veux, c'est quelque chose de similaire aux requêtes du drupal, quand toute la chaîne de requête est conservée dans une variable. Pour cette fin, le code de mod_rewrite suivant peut être utilisé:comportement indésirable de mod_rewrite

RewriteRule ^(.*)$ home.php?q=$1 [L,QSA] 

Le problème commence quand une certaine chaîne commence par le nom du fichier déjà existant dans le répertoire; Par exemple, si j'ouvre une page: http://localhost/home/blablabla - le contenu de $ _GET sont les suivantes:

Array ([q] => home.php) 

Ce que je veux voir est:

Array ([q] => home/blablabla) 

Je pense qu'il est quelque chose avec le site Web par défaut ou mod_rewrite configuration, mais je ne pouvais pas comprendre ...

Répondre

2

Vous avez à exclure home.php:

RewriteCond %{REQUEST_URI} !^/home\.php$ 
RewriteRule ^(.*)$ home.php?q=$1 [L,QSA] 

Ou vous excluez toutes les fichier existant:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ home.php?q=$1 [L,QSA] 

La raison: Le L flag causes an internal redirect avec la nouvelle URL réécrites. Et la nouvelle URL home.php correspond également à l'expression ^(.*)$.

+0

L'exclusion des fichiers (et répertoires) existants en utilisant la commande ci-dessus est très pratique, cependant, dans ce cas, le $ _GET apparaît vide ... – turezky

+1

MultiViews pourrait provoquer ce comportement. Essayez de le désactiver. Voir http://httpd.apache.org/docs/2.2/content-negotiation.html#multiviews – Gumbo

+0

Yeap, c'est :) Désactivation tout de suite :) – turezky

0

non exactement une réponse à votre question, mais est-ce pas ce que _SERVER [ « REQUEST_URI »] et _SERVER [ « REDIRECT_URL »] sont pour?

0

Il semble que vous ayez besoin de l'indicateur [DPI] récemment ajouté pour supprimer PATH_INFO avec plusieurs réécritures par répertoire.