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にリダイレクトしません。
リダイレクトコードにどのような変更を加える必要がありますか?
「クエリ文字列破棄」またはQSD
フラグを書き換えルールに追加する必要があります。
RewriteRule ^(.*)$ https://SiteB.tld/ [R=301,QSD,L]
ドキュメント から:
要求されたURIにクエリ文字列が含まれ、ターゲットURIに含まれていない場合、RewriteRuleのデフォルトの動作は、そのクエリ文字列をターゲットURIにコピーすることです。
[QSD]
フラグを使用すると、クエリ文字列が破棄されます。このフラグは、バージョン2.4.0以降で使用できます。
[QSD]
と[QSA]
を一緒に使用すると、[QSD]
が優先されます。ターゲットURIにクエリ文字列がある場合、デフォルトの動作が観察されます。つまり、元のクエリ文字列は破棄され、
RewriteRule
ターゲットURIのクエリ文字列に置き換えられます。