Bonjour,

Mon client m'a fournit un fichier avec les lignes suivantes :

Code apache2 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
RedirectPermanent pages/rechercher-un-bien.php <a href="http://www.son-site.com/acheter" target="_blank">http://www.son-site.com/acheter</a>
 
RewriteCond %{QUERY_STRING} ^current=(.*)$ 
RewriteRule ^pages/rechercher-un-bien.php$ <a href="http://www.son-site.com/acheter?" target="_blank">http://www.son-site.com/acheter?</a> [L,R=301]

Comme l'instruction RedirectPermanent ne semble pas fonctionner sur son serveur j'ai remplacé ces instructions par des RewriteRule ... [L,R=301]http://httpd.apache.org/docs/2.4/mod...irectpermanent

Code apache2 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
RewriteRule pages/rechercher-un-bien.php <a href="http://www.son-site.com/acheter" target="_blank">http://www.son-site.com/acheter</a> [L,R=301]
 
RewriteCond %{QUERY_STRING} ^current=(.*)$ 
RewriteRule ^pages/rechercher-un-bien.php$ <a href="http://www.son-site.com/acheter?" target="_blank">http://www.son-site.com/acheter?</a> [L,R=301]

Ce qui est sensé être équivalent.
(mais peut être que je me trompe.)

Avec ces règles misent en place, l’ancienne url :
http://www.son-site.com/pages/recher...fiche=12187749
Est redirigé vers
http://www.son-site.com/acheter?fiche=12187749
(301 Moved Permanently)

Le client voudrait que les paramètres « ?fiche=12187749 » disparaissent lors de la redirection.

Hors le comportement observé est exactement celui décrit dans la règle :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
RewriteRule pages/rechercher-un-bien.php http://www.son-site.com/acheter [L,R=301]
A cause du flag [L] cette règle empêche le traitement des règles suivantes.
http://httpd.apache.org/docs/trunk/r...gs.html#flag_l
Donc tous les requêtes vers pages/rechercher-un-bien.php* sont redirigé vers http://www.son-site.com/acheter avec transmission de la query_string. (Comportement par défauts d’apache.)

Une solution serait d’ajouter le flag [QSD] http://httpd.apache.org/docs/trunk/r....html#flag_qsd
Mais apache refuse de redémarrer.

J'ai également testé en inversant l'ordre des deux règles

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
RewriteCond %{QUERY_STRING} ^current=(.*)$ 
RewriteRule ^pages/rechercher-un-bien.php$ http://www.son-site.com/acheter? [L,R=301]
 
RedirectPermanent pages/rechercher-un-bien.php http://www.son-site.com/acheter
Ou en enlevant le flag [L] de la première règle.

Code apache2 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
RewriteRule pages/rechercher-un-bien.php <a href="http://www.son-site.com/acheter" target="_blank">http://www.son-site.com/acheter</a> [R=301]
 
RewriteCond %{QUERY_STRING} ^current=(.*)$ 
RewriteRule ^pages/rechercher-un-bien.php$ <a href="http://www.son-site.com/acheter?" target="_blank">http://www.son-site.com/acheter?</a> [L,R=301]



Mais j'arrive juste à en conclure que ça :
Code apache2 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
RewriteCond %{QUERY_STRING} ^current=(.*)$ 
RewriteRule ^pages/rechercher-un-bien.php$ <a href="http://www.son-site.com/acheter?" target="_blank">http://www.son-site.com/acheter?</a> [L,R=301]
ça ne marche pas..