RewriteCond pour faire correspondre les paramètres de chaîne de requête dans n'importe quel ordre
J'ai une URL qui peut contenir trois paramètres:
- ?category=ordinateurs
- &de la sous-catégorie=ordinateurs portables
- &product=dell-inspiron-15
J'ai besoin de redirection 301 cette URL dans sa version facile:
http://store.example.com/computers/laptops/dell-inspiron-15/
J'ai ce mais ne peut pas le faire fonctionner si les paramètres de chaîne de requête sont dans un autre ordre:
RewriteCond %{QUERY_STRING} ^category=(\w+)&subcategory=(\w+)&product=(\w+) [NC]
RewriteRule ^index\.php$ http://store.example.com/%1/%2/%3/? [R,L]
source d'informationauteur TrueBlue
Vous devez vous connecter pour publier un commentaire.
Vous pouvez réaliser cela avec de multiples étapes, par la détection d'un paramètre, puis transfert à l'étape suivante, puis rediriger vers la destination finale
Pour éviter la
OR
et double condition, vous pouvez utiliser@TrueBlue suggéré.
Une autre approche consiste à préfixer le chaîne de Test
QUERY_STRING
avec une esperluette&
et cochez la case " toujoursCette technique (la préfixation de la chaîne de Test) peut également être utilisé pour de report déjà trouvé les paramètres pour la prochaine
RewriteCond
. Cela nous permet de simplifier les trois règles de juste unLa
!
est seulement utilisé pour séparer les déjà trouvé et réorganisés de paramètres à partir de laQUERY_STRING
.Je prends une approche légèrement différente pour ce genre de chose, levier ENV VARs définir et de lire par mod_rewrite. Je le trouve plus lisible et maintenable à consulter les références arrières par un nom comme cela, et ces ENV VARs peuvent être réutilisées plus tard dans le traitement de la demande. Globalement, je pense que c'est plus puissant et flexible de l'approche que l'on a accepté de répondre ici. En tout cas, ça fonctionne bien pour moi. J'ai copié mon résumé ci-dessous dans son intégralité:
De https://gist.github.com/cweekly/5ee064ddd551e1997d4c
P. S. Ce n'est pas un copier/pasteable solution à votre question, mais plutôt montre exactement comment à gérer ce genre de problème. Armé w cette compréhension, de l'accroître pour votre exemple sera complètement trivial. 🙂