サイトクローズに伴う対応
サービスの終わりは儚く哀愁が漂うものです。サービスページのクローズをする時に「サービスが終了しました」的な文言をホームページに表示して、ホームページ以外のページにアクセスした場合、ホームページにリダイレクトするように.htaccessで制御する方法をメモしておきます。
301リダイレクト
本当にシンプルなのですが、以下のように書けばOKです。
RewriteEngine on RewriteBase / RewriteCond %{REQUEST_URI} !(^/$) RewriteRule ^(.*)$ / [R=301,L]
3行目の記述は必ず記述します。「ホームページでなければ」という条件なのですが、これが抜けているとホームページにアクセスした時に無限ループに陥ります。
ホームページへのリダイレクトはこれでOKなのですが、例えばホームページでCSSファイルやJavaScriptファイル、画像ファイルなどの読み込みをしていた場合、これらのファイルもリダイレクトされてしまいます。特定のフォルダやファイル(拡張子で分岐など)を対象外にする場合には、ノットイコールの条件を増やしてあげれば良いです。
RewriteEngine on RewriteBase / RewriteCond %{REQUEST_URI} !(^/$) RewriteCond %{REQUEST_URI} !(^/images/) RewriteCond %{REQUEST_URI} !(\.css$) RewriteCond %{REQUEST_URI} !(\.js$) RewriteRule ^(.*)$ / [R=301,L]
これでOK。こうやって1行ずつ条件を書いてもよいですが、少なければOR文(|)でまとめてあげてもいいですね。
RewriteEngine on RewriteBase / RewriteCond %{REQUEST_URI} !(^/$|^/images/|\.css$|\.js$) RewriteRule ^(.*)$ / [R=301,L]
できた!\(^o^)/
最後に余談なのですが、WordPressでこの設定をするとindex.php(もしくはhome.php)より優先度の高いページテンプレートがあった場合、single.phpやpage.phpが表示されてURLはホームページにリダイレクトされるという摩訶不思議アドベンチャーなことが起こりました。
index.php以外のテンプレートページを削除したらうまくいきました。あ、だけどテンプレートがindex.phpしかないから当たり前といえば当たり前か。