La réécriture d'URL avec une sélection de paramètres de chaîne de requête .htaccess
J'ai récemment changé mon CMS, et veulent réécrire certains de mes URLs pour correspondre à la nouvelle URL/paramètre de chaîne de requête format.
L'ancienne URL est:
http://www.mysite.com/search.cgi?tag=foo&blog_id=bar&other=baz
La nouvelle URL est:
http://www.mysite.com/?s=foo
En d'autres termes, il y a plusieurs paramètres de chaîne de requête dans l'ancien format, mais je ne soin de réécrire le tag param de s tout en gardant la même valeur. Les autres paramètres doivent être jetés. Bien sûr, l'ordre des paramètres ne compte pas. Il ne devrait pas d'importance si la balise est le seul paramètre ou pas.
Des idées?
OriginalL'auteur mshafrir | 2010-01-21
Vous devez vous connecter pour publier un commentaire.
Vous pouvez essayer d'utiliser l'expression régulière et de regroupement, si votre serveur prend en charge. Si je ne me trompe pas vous réécrire un seul paramètre, je suppose que vous pouvez essayer quelque chose comme (si vous utilisez apache mod_rewrite):
Edit: je l'amélioration de l'expression régulière un peu pour le match "tag" indépendamment de sa position dans la chaîne de requête et de préserver les caractères spéciaux des séquences telles que
&
En outre, il doit éviter les matchs avec des paramètres similaires (c'est à dire: il ne correspond pas à un paramètre appelé "alttag").Edit #2: Une alternative (surtout si vous avez de filtrer plusieurs paramètres) est d'utiliser un programme externe pour faire de la réécriture. Cette page: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritemap (en particulier la section "programme de réécriture Externe") contient des informations utiles.
Oui, %1 est utilisé pour désigner un groupe dans une directive RewriteCond, tandis que $1 est utilisé pour désigner un groupe dans une directive RewriteRule.
Et comment puis-je configurer mon RewriteUrl spécifiquement à la carte /de recherche.cgi?... partie de /?...
Aussi, si je voulais de cette configuré une Redirection au lieu d'une Réécriture, ça changerait quoi?
Pour faire une Redirection mettre R=<Code d'État HTTP> après le [L]ast règle: c'est à dire:
RewriteRule %{REQUEST_URI} %{REQUEST_URI}?%1 [L,R=302]
. Vous pouvez trouver une liste complète des codes d'état HTTP ici: w3.org/Protocols/rfc2616/rfc2616-sec10.html (vous devrez utiliser celles de la 300-307 gamme). Il est de pratique courante d'utiliser soit 301 ou 302 codes d'état.OriginalL'auteur
Sur un serveur web Apache, en plaçant la règle suivante .htaccess dans la racine du document réécrire l'Url que vous avez décrit:
La règle ci-dessus utilise une redirection 302, de sorte que votre navigateur ne prend pas en "mémoriser" la redirection de la règle tandis que vous faites des tests et de peaufinage de la règle. Une fois que vous avez terminé le test, réglez [R] [R=301]. Une 301 est une redirection permanente, et il est mieux pour le RÉFÉRENCEMENT.
s
paramètre, et il fonctionnera comme demandé.De retour à vous. +1
OriginalL'auteur Stephen M. Harris
Voici une autre version pour obtenir précisément ce que l'OP voulait dire. @smhmic la réponse est proche de cela. Je préfère juste explicite début-ou-commercial pour trouver le paramètre, plutôt que le mot-limites de l'approche. (Accepté la réponse est trop compliqué, et a des problèmes.)
C'est de dire:
(?: )
ne pas saisir cette en % nombre^|&
au début de la chaîne de requête ou après une esperluette (cela agit comme la limite de mot, mais spécifiquement pour les url).tag=
le param nous sommes à la recherche pour.( )
capturer ce, en %1.[^&]*
zéro ou plusieurs caractères qui ne sont pas une esperluette (en s'arrêtant à esperluette ou en cours d'exécution pour la fin).OriginalL'auteur goodeye