Version complète: sur le forum Webmaster Hub : parasite dans le redirectmatch
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > Fichier .htaccess et réécriture d'URLs
jnj
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
CODE
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 :
CODE
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 !
CITATION
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.
TheRec
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 :
CODE
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 :
CODE
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.
jnj
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
CODE
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
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.
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.