2010-11-27 23 views
0

J'essaie de réécrire certaines URL en utilisant mod_rewrite, mais je reçois des résultats différents de deux règles similaires. Voici mon code:Problème avec htaccess et la chaîne de requête

Première règle:

RewriteEngine On 
RewriteBase/
RewriteRule ^api/(.*?)$   index.php?p=$1 [L] 

Avec une entrée de example.com/api/test1/test2/test3-je obtenir la sortie suivante en PHP:

Array ([p] => test1/test2/test3) 

Deuxième règle:

RewriteEngine On 
RewriteBase/
RewriteRule ^/(.*?)$   index.php?p=$1 [L] 

ou

RewriteRule ^(.*?)$   index.php?p=$1 [L] #test 

Avec une entrée de example.com/test1/test2/test3-je obtenir la sortie suivante en PHP:

Array ([p] => index.php) 

Ce n'est pas ce que je pensais, je pensé que ce serait [p] => test1/test2/test3 comme avec la première règle. Que puis-je faire pour que les résultats soient les mêmes?

Merci d'avance.

+1

Quel est le problème? Qu'est-ce qui est attendu et qu'est-ce qui se passe? – PeeHaa

+0

Je veux que la deuxième règle retourne la même sortie de la première règle. Peux-tu me comprendre? Merci. – beddamadre

+0

Je ne comprends pas. –

Répondre

0

Votre deuxième règle,

RewriteRule ^(.*?)$ index.php?p=$1 [L] 

contient un motif de test qui correspond à ce que vous réécrivez à (index.php). Après la réécriture initiale de /test1/test2/test3-index.php? P = test1/test2/test3, une autre réécriture est effectuée qui transforme index.php (avec p = test1/test2/test3 chaîne de requête) à index.php? P = index.php.

Vous devez conditionner la règle afin que cette deuxième réécriture ne soit pas effectuée. Une façon de le faire est de voir si la cible de la demande existe:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^.*$ index.php?p=$0 
+0

Parfait, merci beaucoup TIM! ;) – beddamadre

+0

Définir comme réponse si c'est la solution s'il vous plaît. – PeeHaa