私はいくつかのhtaccessリダイレクトに苦労してきました。スタックの読み取りと検索に少し時間を費やしただけで、私のシナリオで機能するアンカーを取得できませんでした。
私は、古いクライアントWebサイトの301を新しいWebサイトにリダイレクトするプロセスを進めています。古いページには、URLから削除するパラメータークエリがあります。
/menu.php?idCategorie=29&idDetail=172
に
/new-website-page/
実行するクエリは複数ありますが、ここにいくつかの例を示します。
/menu.php?idCategorie=29&idDetail=172
/menu.php?idCategorie=29&idDetail=182
/menu.php?idCategorie=29&idDetail=184
/menu.php?idCategorie=29&idDetail=256
すべてが異なる新しいページにリンクしています。
ここに私が試したものがあります:
RewriteCond %{QUERY_STRING} idDetail=172
RewriteRule ^menu.php(.*) /new-page/? [R=301,L]
正しくリダイレクトされますが、URLはクエリ文字列を保持します。
http://website.com/new-page/?idCategorie=29&idDetail=172
私もこれを試しました:
RewriteRule ^menu.php?idCategorie=29&idDetail=172$ http://website.com/new-page/? [L,R=301]
この:
RewriteCond %{QUERY_STRING} idDetail=172(.*)$
RewriteRule ^menu.php /new-page-name?$1 [L,R=301]
そして、それは機能しませんでした(まだ最後にクエリ文字列があります)
ありがとう!
次のルールを使用できます。
RewriteRule ^menu\.php$ /new-page-name? [L,R=301]
末尾の?
に注意してください。これは、元のURIの既存のクエリ文字列を削除するために使用です。
Anubhavaの答えに加えて、代わりにApache 2.4.0のQSDフラグを使用できます
RewriteRule ^menu\.php$ /new-page-name [L,R=301,QSD]
http://httpd.Apache.org/docs/current/en/rewrite/flags.html#flag_qsd