web-dev-qa-db-fra.com

redirection htaccess 301 - Supprimer la chaîne de requête (QSA)

J'ai eu du mal avec certaines redirections htaccess. Je viens de passer du temps à lire et à chercher sur la pile et je n'ai pas pu obtenir de réponse qui fonctionne avec mon scénario.

Je suis en train de faire la redirection 301 d'un ancien site Web client vers un nouveau. Les anciennes pages ont une requête de paramètres que je veux supprimer de l'url.

/menu.php?idCategorie=29&idDetail=172

à

/new-website-page/

J'ai plusieurs requêtes à faire, voici un exemple:

/menu.php?idCategorie=29&idDetail=172
/menu.php?idCategorie=29&idDetail=182
/menu.php?idCategorie=29&idDetail=184
/menu.php?idCategorie=29&idDetail=256

Qui sont tous liés à différentes nouvelles pages.

Voici ce que j'ai essayé:

RewriteCond %{QUERY_STRING} idDetail=172
RewriteRule ^menu.php(.*) /new-page/? [R=301,L]

Je suis redirigé correctement, mais l'URL conserve la chaîne de requête:

http://website.com/new-page/?idCategorie=29&idDetail=172

J'ai également essayé ceci:

RewriteRule ^menu.php?idCategorie=29&idDetail=172$ http://website.com/new-page/? [L,R=301]

Et ça:

RewriteCond %{QUERY_STRING} idDetail=172(.*)$
RewriteRule ^menu.php /new-page-name?$1 [L,R=301]

Et cela n'a pas fonctionné (il reste la chaîne de requête à la fin)

Merci!

39
newpxsn

Vous pouvez utiliser cette règle:

RewriteRule ^menu\.php$ /new-page-name? [L,R=301]

Prenez note de la fin ? à la fin qui est tilisé pour supprimer toute chaîne de requête existante dans l'URI d'origine.

89
anubhava

En plus de la réponse de anubhava, vous pouvez également utiliser l'indicateur QSD d'Apache 2.4.0

RewriteRule ^menu\.php$ /new-page-name [L,R=301,QSD]

http://httpd.Apache.org/docs/current/en/rewrite/flags.html#flag_qsd

31
RafaSashi