2009-10-06 8 views
4

Je suis en train de réécrire une URL à partir de:Comment puis-je conserver la chaîne de requête existante dans une règle de mod_rewrite

http://domain.com/aa/whatever/whatever.php
à
http://domain.com/whatever/whatever.php?language=aa

Cependant, selon les variables existantes _GET $, il doit soit être? langue ou & langue.

Pour ce faire, j'utilise 2 regexes avec le [L] Drapeau:

RewriteRule ^([a-z]{2})/(.*\.php\?.*) /$2&language=$1 [L] 
RewriteRule ^([a-z]{2})/(.*) /$2?language=$1 [L] 

Le second fonctionne comme prévu ... Le premier est jamais frappé cependant (il tombe jusqu'à la seconde regex , qui frappe), même si Regex Coach me montre qu'il devrait le faire.

modifier:

Si seulement lu que je dois utiliser deux barres obliques pour échapper à la question de marque. Si je fais cela, il frappe la première regex mais ne trouve jamais les autres variables GET.

Répondre

9

De l'documentation for mod_rewrite le modèle en RewriteRule correspond contre la partie de l'URL après la nom d'hôte et port, et avant la chaîne de requête afin que la chaîne de requête ne soit pas incluse. C'est pourquoi vous n'obtenez pas les autres variables.

Pour ajouter un nouveau paramètre de chaîne de requête language=xx tout en préservant toute chaîne de requête existante, vous devez utiliser l'indicateur QSA (chaîne de requête append). Avec ce drapeau, une seule règle basée sur votre deuxième cas devrait suffire:

RewriteRule ^([a-z]{2})/(.*) /$2?language=$1 [QSA] 
+0

J'ai trouvé ça avant que je ne prenne la réponse, mais c'est quand même la bonne réponse. –

+2

Merci d'avoir accepté la réponse même si vous avez réussi à la trouver vous-même. – mikej

0

Vous pouvez configurer la réécriture d'URL pour transmettre la langue au script php via l'élément PATH_INFO de la superglobale $ _SERVER. Il suffit de passer la langue au script comme ceci:

foobar.php/en?args 

Dans ce cas, $ _SERVER [PATH_INFO] serait égal à/en

Questions connexes