web-dev-qa-db-ja.com

クエリ文字列を含むサイトAのすべてのページをサイトBのホームページにリダイレクトする方法

SiteAのすべてのページをSiteBのホームページにリダイレクトしたい。

SiteAの.htaccessファイルでこのコードを使用しました。

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^(.*)$ https://SiteB.tld/ [R=301,L]
</IfModule>


コードは完全に機能しますが、次のようなQuestion Markを含むURLには機能しません。

https://SiteA.tld/?action=dayview&calendar=1&year=2000&month=01&day=01


このページは404 Not Foundを取得し、SiteBのhompageにリダイレクトしません。

リダイレクトコードにどのような変更を加える必要がありますか?

2
Pasakgroup

「クエリ文字列破棄」またはQSDフラグを書き換えルールに追加する必要があります。

RewriteRule ^(.*)$ https://SiteB.tld/ [R=301,QSD,L]

ドキュメント から:

要求されたURIにクエリ文字列が含まれ、ターゲットURIに含まれていない場合、RewriteRuleのデフォルトの動作は、そのクエリ文字列をターゲットURIにコピーすることです。 [QSD]フラグを使用すると、クエリ文字列が破棄されます。

このフラグは、バージョン2.4.0以降で使用できます。

[QSD][QSA]を一緒に使用すると、[QSD]が優先されます。

ターゲットURIにクエリ文字列がある場合、デフォルトの動作が観察されます。つまり、元のクエリ文字列は破棄され、RewriteRuleターゲットURIのクエリ文字列に置き換えられます。

2