Aller au contenu

parasite dans le redirectmatch


Sujets conseillés

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 Permanently

Date: 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.

Lien vers le commentaire
Partager sur d’autres sites

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 On
RewriteRule ^/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.

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...