2009-06-30 7 views
1

Je suis assez expérimenté en PHP mais je n'utilise pas vraiment mod_rewrite (bien que je devrais). Tout ce que je veux demander, c'est s'il est possible de passer beaucoup de variables à travers une seule règle de réécriture.Puis-je transmettre des variables correspondantes à la nouvelle URL avec mod_rewrite?

Par exemple, est-il possible de réécrire ceci:

localhost/test.php?id=1&name=test&var1=3 

dans ce:

localhost/mysupertest/ 

et également utiliser la même règle de réécriture pour des valeurs différentes?

localhost/test.php?id=5&name=another_name&var3=42 

dans

localhost/mysupertest/ 

Je sais que cela peut être fait en utilisant Ajax, cookies, session ou variables POST, mais je veux vraiment utiliser les variables GET.

+1

Voulez-vous vraiment rediriger une demande de '/test.php? Id = 1 & name = test & var1 = 3' vers/mysupertest /'? Ou plutôt l'inverse, une requête de '/ mysupertest /' en '/test.php? Id = 1 & name = test & var1 = 3'? – Gumbo

+0

Fondamentalement, je voudrais réécrire ma pagination pour une catégorie d'objet. Dites que je suis en train de parcourir la catégorie Supertest. Je ne veux pas montrer mysupertest/page/1/ou mysupertet/page/2 mais mysupertest/pour chaque page – Fotis

Répondre

1

Je ne suis pas sûr de ce que vous demandez, mais vous devriez probablement utiliser l'option [QSA] pour mod_rewrite, qui ajoutera tous les paramètres d'URL à partir de '?'. Par exemple:

RewriteRule ^mysupertest/? test.php [QSA] 

Jetez un oeil à this question pour plus de détails.

0

Oui, c'est possible. Tout ce que vous pouvez faire correspondre avec votre expression regex peut être réécrit comme n'importe quelle URL. Chaque fois que vous placez une partie de votre chaîne regex dans la parenthèse(), elle devient une variable qui peut être utilisée lors de la réécriture.

Vous voulez quelque chose comme (je pense):.

RewriteRule test.php \ id = [0-9] + & name = + & var1 = [0-9] + mysupertest/

1

Certainement possible. Quelque chose comme ça le ferait:

RewriteRule test.php\?(.*)$ mysupertest/ 

Cependant, vous perdrez vos variables si vous faites cela, car il est effectivement la même chose que l'accès localhost/mysupertest directement, sans données de chaîne de requête. Si vous souhaitez conserver les variables, peut-être dans une URL de style REST, vous pouvez utiliser des références arrière pour les réécrire. Comme John l'a mentionné, une référence arrière est simplement un ensemble de parenthèses, et toutes les correspondances à l'intérieur d'elles deviennent une variable dans un schéma d'ordre numérique.

RewriteRule test.php\?id=(.*)&name=(.*)&var3=(.*) mysupertest/$1/$2/$3 

Avec la règle ci-dessus, l'accès test.php?id=567&name=test&var3=whatever serait le même que l'accès mysupertest/567/test/whatever

0

Le paramètre QUERY_STRING ne fait pas partie de l'URI.De la documentation RewriteRule:

Note: chaîne de requête

Si vous souhaitez faire correspondre le nom d'hôte, le port, ou une chaîne de requête, utilisez un RewriteCond avec les %{HTTP_HOST}, %{SERVER_PORT} ou %{QUERY_STRING} des variables respectivement .

Questions connexes