本記事のソースコードの利用によって生じた損害について、当方は一切の責任を負いません。ご自身の判断と責任のもとで参照・ご利用ください。
この記事は最終更新から4年以上経過しています。
information(固定ページ)以外のアクセスをすべて「https://www.example.com/archive/」にリダイレクトするための.htaccessの設定。
とりあえず.htaccessファイルに除外設定とリダイレクトの処理を最終行に記述したが、まったっくもってリダイレクトすることはなかった。そこでRewriteBaseの下に記述してみたが、今度は問答無用でリダイレクトしてしまった(除外処理が無視される)。
ドハマりしてはいたが冷静さは失わなかった。下記のエントリーに「1つが一致したときにルールの読み取りを停止するには、[L]フラグを追加する必要があります。」という記述を見つけた。
なるほど、リダイレクトの処理に行く前に読み取りを停止してしまっているから、リダイレクトの処理が実装されないのだなと思い「L」を削除した。
変更前
RewriteRule . /index.php [L]
変更後
RewriteRule . /index.php
最終的に以下の書き方で意図した動きをするようになった。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php
#除外設定
RewriteCond %{REQUEST_URI} !(^/information)
#リダイレクト
RewriteRule ^(.*)$ https://www.example.com/archive/ [R=301,L]
</IfModule>
# END WordPress
優先順位とかそういうのを知らなくてここにたどり着くまでに2時間かかってしまった・・・。しかしオーダー通り実装することができたので良しとする。