新しいドメインに引っ越しするときに、新サイトに告知ページをつくり、wordpressで作成している旧サイトから全てそのページへリダイレクトさせたら良いが、新サイトに告知ページを作れない場合、旧サイトに告知ページを作ることがある。
ただ、それでは告知ページにもリダイレクトが発生するので、リダイレクトループとなってしまう。
web検索すると、「該当ページだけ除外する」といった設定が見られるが、なぜかこれでは除外できない。
RewriteCond %{REQUEST_URI} !(^/test/)
理由の詳細は追ってないが、もしかしたらwordpress内の何かしらのリダイレクト(もしくはリライト?)の影響を受けているのかもしれない。
解決策
結果として、以下のように設定することで解決した。
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/test/?$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /test/ [R=301,L]
RewriteRule ^$ /test/ [R=301,L]
# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
<IfModule mod_rewrite.c>
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
ポイントとしては、以下。
- 「-f」「-d」の行をつけることで除外ページを認識できた。
- wordpressのバージョンアップにより、何かしらの影響が出る可能性もある(多分大丈夫なはずだが)。のでバージョンアップ時には確認が必要。
- 「RewriteRule ^$ /test/ [R=301,L]」をつけないと、トップページだけリダイレクトしない。