web-dev-qa-db-ja.com

Apacheのリダイレクト301ディレクティブは、クエリ文字列を含むURLに影響しません

ホームページにリダイレクトしたいこの古いリンクhttp://www.example.com/?page_id=617/があります。私はこのリダイレクトを次のもので実装しようとしました:

Redirect 301 /?page_id=617/ https://www.example.com/

この変更を適用した後、何も起こりませんでした。古いURLはリダイレクトしません。

4
user6744479

クエリ文字列をmod_alias Redirectと一致させることはできません。代わりにmod_rewrite RewriteRuleディレクティブを使用する必要があります。 RewriteCondディレクティブのQUERY_STRINGサーバー変数と照合します。

代わりに、.htaccessファイルの上部付近で次を試してください。

RewriteEngine On
RewriteCond %{QUERY_STRING} ^page_id=617/$
RewriteRule ^$ https://www.example.com/? [R=302,L]

これはexactクエリ文字列?page_id=617/と一致することに注意してください。 パターン^page_id=617に変更して、単純にstarts?page_id=617となるクエリ文字列に一致させます。

302を301に変更するのは、正常に機能していることが確実な場合のみです。 (誤ったリダイレクトがブラウザによってキャッシュされるのを防ぐため。)

RewriteRulesubstitutionの最後の?は、クエリ文字列をリクエストから削除するために必要です(そうでない場合、これはターゲットURLに渡されます)。 Apache 2.4+では、代わりにQSDフラグを使用できます。

4
MrWhite