mod_rewrite でパターンにマッチしない場合にリダイレクトする

メンテナンスかなんかで HP へのアクセスを全て特定のファイル(メンテナンスの通知用のページとか)にリダイレクトしたい場合、Apache の場合には mod_rewrite モジュールを使うと便利です。

.htaccess 等で

RewriteRule .* test.html

としておけば .htaccess が置かれているディレクトリ以下へのアクセスは全て test.html に転送(上書き?)されます。

ところが、ルート直下の admin と言うフォルダに管理ページがあったりした場合、メンテナンス中でもアクセスしたかったりします。
「admin フォルダ以外をリダイレクトする」みたいな設定は無いのかな・・・と、ずーと思ってました。

が、マニュアルに載ってました・・・普通に。
気づかなかった今まで・・・

RewriteRule Directive(mod_rewrite - Apache HTTP Server)

! を着けるとパターンにマッチしない場合だけリダイレクトしてくれるようです。

前述の例であれば、ルートディレクトリに .htaccess を置き

RewriteEngine On
RewriteRule !^admin\/ test.html

とすることで /admin 以下のファイルを除く全てのアクセスが test.html にリダイレクトされるようになります。

これは便利だ・・・
もっと早く知りたかったなぁ・・・