Question

Je cherche à réécrire des URL avec plusieurs sous-chaînes. Une sous-chaîne est demandée en tant que sous-répertoire, tandis que toute autre est demandée en tant que paramètre de chaîne de requête normale.

Par exemple, je voudrais réécrire les URL de

http://www.mysite.com/mark/friends?page=2

à

http://www.mysite.com/friends.php?user=mark&page=2

Je suis en mesure d'accomplir cela, à l'exception du point d'interrogation. Voici ma règle de réécriture:

...
RewriteEngine On
RewriteBase /
RewriteRule ^([A-Za-z0-9-_]+)/friends[?]?([^/\.]+)?$ friends.php?user=$1&$2 [L]

Si je change le point d'interrogation en un autre caractère, cela fonctionne très bien. Il semble que le problème est que le "?" Le caractère est interprété incorrectement comme le début d'une nouvelle chaîne de requête.

Je dois transmettre tous les paramètres qui apparaissent après / utilisateur / amis tels quels. Comment puis-je accomplir cela?

Était-ce utile?

La solution

Vous devriez utiliser l'indicateur [QSA] au lieu d'essayer de réécrire la chaîne de requête. [QSA] transmet la chaîne de requête à l'URL réécrite.

Votre règle devrait donc ressembler à:

...
RewriteEngine On
RewriteBase /
RewriteRule ^([A-Za-z0-9-_]+)/friends/? friends.php?user=$1 [QSA,L]

Votre cas est très similaire à l'exemple d'utilisation de l'indicateur QSA dans le livre de recettes mod_rewrite .

Autres conseils

La requête ne fait pas partie du chemin de l'URL et ne peut donc pas être traité avec la directive RewriteRule . Cela ne peut être fait qu'avec le RewriteCond . / a> directive (voir % {QUERY_STRING} ).

Mais comme l'a déjà dit Chad Birch suffit de définir le QSA flag pour que la requête demandée d'origine soit automatiquement ajoutée à la nouvelle URL.

En plus d'utiliser l'indicateur de réécriture QSA, vous pouvez également utiliser la variable d'environnement QUERY_STRING comme indiqué ci-dessous:

RewriteEngine On
RewriteBase /
RewriteRule ^([A-Za-z0-9-_]+)/friends$ /friends.php?user=$1&%{QUERY_STRING}

Et l'URL en question

http://www.example.com/mark/friends?page=2

sera réécrit dans (comme spécifié):

http://www.example.com/friends.php?user=mark&page=2
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top