48 votes

Comment puis-je faire correspondre les variables de chaîne de requête avec mod_rewrite?

Supposons que j'ai des URL avec des paramètres de chaîne de requête comme ceux-ci:

 /index.php?book=DesignPatterns&page=151
/index.php?book=Refactoring&page=157
 

En utilisant mod_rewrite , comment puis-je les rediriger vers des URL SES comme celles-ci?

 /DesignPatterns/151
/Refactoring/157
 

107voto

Patrick McElhaney Points 22093
RewriteCond %{QUERY_STRING} book=(\w+)&page=(\d+)  
RewriteRule ^index.php /%1/%2? [R=301]

Parce que RewriteRule ne regarde que le chemin d'accès (jusqu'à, mais pas y compris le point d'interrogation), l'utilisation RewriteCond pour capturer les valeurs dans la chaîne de requête.

Notez que les matchs à partir de RewriteCond sont capturés en %1, %2, etc., plutôt que d' $1, $2, etc.

Notez également l' ? à la fin de l' RewriteRule. Il raconte mod_rewrite ne pas ajouter de l'origine de la chaîne de requête de l'URL, si vous vous retrouvez avec /DesignPatterns/151 intead de /DesignPatterns/151?book=DesignPatterns&page=151.

L' [R=301] , le serveur envoie une réponse de redirection. Au lieu de réécrire, il indique au client d'essayer de nouveau avec le nouveau URL. L' =301 fait une redirection permanente, de sorte que, entre autres les choses, les moteurs de recherche sauront remplacer l'ancienne URL par la nouvelle URL dans leurs index.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X