jnj Posté 24 Juillet 2007 Posté 24 Juillet 2007 Bonsoir je me heurte à un probleme de .htaccess que je ne trouve documenté nul part voici le contexte je change d'hébergeur et en mêm temps je refonds mon site sur le nouvel espace, je mets un .htaccess qui va rerouter les anciennes pages vers les nouvelles un redirectmatch 301 permet de rediriger sur une expression reguliere ceci par exemple fonctionne RedirectMatch 301 /visuel_approche_globale_commerciale_et_marketing.htm /approche-globale-marketing-commerciale.php un outil de tracage de header HTTP me donne "HTTP/1.1 301 Moved Permanently etc. " bref, c OK MAis : RedirectMatch 301 ^/fiche_reference\.htm(.*)$ http://dev-ventes.nuxit.net/references.php donnent l'impression de fonctionner MAIS en fait à la fin il y a : .php?ID=2 (il y ajout de la fin de la chaine trouvée en expression régulière et l'outil de HTTP header donne le même resultat => Google va prendre en redirect 301 une URL inexistante ! HTTP/1.1 301 Moved PermanentlyDate: Tue, 24 Jul 2007 20:06:59 GMT Server: Apache Location: http://dev-ventes.nuxit.net/references.php?ID=2 je ne comprends pas pourquoi il y a greffe de ces 4 caractères ?ID=2 derrière le .php je suis preneur de toute idée svp car là je cale et je ne pige pas. Merci **EDIT Administrateur (TheRec)** Merci d'utiliser les BB Codes adéquats pour présenter ton code. Plus d'informations en cliquant sur "Aide BB Code" en dessous de la liste d'émoticons lors de la rédaction d'un message.
TheRec Posté 24 Juillet 2007 Posté 24 Juillet 2007 Bonsoir, Lorsque tu fais une redirection permanente, d'une source précise (sans devoir recourir à une expression régulière) à une destination connue, tu peux simplement utiliser RedirectPermanent : RedirectPermanent /visuel_approche_globale_commerciale_et_marketing.htm http://destination.com/approche-globale-marketing-commerciale.php C'est plus "court" et surtout cela ne fait pas appel au moteur d'expression régulières. Ensuite concernant ton problème de RedirectMatch, le moteur de redirection ajoute automatiquement la QueryString (paramètres GET : ?var1=valeur1&var2=valeur2 etc.) de l'URL source à l'URL de destination. À ma connaissance il n'est pas possible de corriger cela. Pour la réécriture d'URL par contre, tant que le flag QSA (QueryString Append) n'est pas activé la QueryString n'est pas ajoutée à la fin de l'URL de destination. Donc tu pourrais faire ceci ainsi : RewriteEngine OnRewriteRule ^/fiche_reference\.htm$ /references.php [R=301] Avec ceci tu tires partie du comportement par défaut de RewriteRule, sans le flag QSA la QueryString ne sera pas transmise de l'URL source vers l'URL de destination. R=301 transforme la réécriture en redirection permanente. (À toi de voir si tu as besoin des "/" au début de la source et de la destination, cela dépend de la configuration du serveur). Bonne continuation.
jnj Posté 25 Juillet 2007 Auteur Posté 25 Juillet 2007 Merci au milieu de la nuit j'ai compris que le problème venait de QSA et en cherchant j'ai trouvé via des forum et le mode d'emploi apache que pour bloquer QSA qui est d'office mis en service meme si on ne l'appelle pas, il faut le bloquer par un ? à la fin de la chaine de remplacement pour diverses raisons, je ne peux pas employer le redirect permanent - j'ai besoin des expressions régulières pour gérer les multiples URL à rediriger et en plus elles contiennent des caractères spéciaux donc ... exemple RewriteRule ^(.*)\.htm$ /accueil-intermediaire.php? [R=301,L] Le ? derriere le .php bloque l'arrivée de l'argument ID=4 etc. maintenant cela reste propre.
TheRec Posté 25 Juillet 2007 Posté 25 Juillet 2007 Oui, effectivement ce que je te proposait ne fonctionne pas, je me suis trompé. La solution que tu propose me semble être la seule solution viable.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant