web-dev-qa-db-ja.com

htaccess 301リダイレクト-クエリ文字列の削除(QSA)

私はいくつかの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]

そして、それは機能しませんでした(まだ最後にクエリ文字列があります)

ありがとう!

39
newpxsn

次のルールを使用できます。

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

末尾の?に注意してください。これは、元のURIの既存のクエリ文字列を削除するために使用です。

89
anubhava

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

31
RafaSashi