さくらインターネットのサーバーメンテナンスにより、本番サイトへのアクセスを、別サーバーに用意したメンテナンスページへ一時的に転送させることがあったので、リダイレクト処理を行うために使ったhtaccessのコードを紹介する。

コード全文

ErrorDocument 503 /maintenance/
ErrorDocument 404 /maintenance/

<IfModule mod_rewrite.c>
    RewriteEngine On

    # 下層全ページリダイレクト
    RewriteCond %{REQUEST_URI} !=/maintenance/
    RewriteRule ^.*$ - [R=503,L]

    # トップページへのアクセスをリダイレクト
    RewriteRule ^$ /maintenance/ [R=302,L]
</IfModule>

まず、サーバーが変わると存在しないページやプログラムが出てくるため、503や404のエラーが大量に発生する。

これらのエラーに対しメンテナンスページへのリダイレクトをかける。

ErrorDocument 503 /maintenance/
ErrorDocument 404 /maintenance/

次に、エラーが発生しなかった場合(正常アクセス)のアクセスに対し、リダイレクトをかける。

<IfModule mod_rewrite.c>
    RewriteEngine On

    # 下層全ページリダイレクト
    RewriteCond %{REQUEST_URI} !=/maintenance/
    RewriteRule ^.*$ - [R=503,L]

    # トップページへのアクセスをリダイレクト
    RewriteRule ^$ /maintenance/ [R=302,L]
</IfModule>

とりあえず今回用意したコードは上記のとおりとなる。

htaccessの理解に関しては、かなり曖昧なところがあるので突っ込みどころ満載だろうが、今回はとりあえずこれで何とかなった。