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時間かかってしまった・・・。しかしオーダー通り実装することができたので良しとする。