.htaccessファイルでメンテナンスモード完全版

基本的には全ページメンテページを表示したいけど、特定のIPからのアクセスや画像や指定ページはアクセスOKにしておきたい!

そんなわがままを叶えます。
これがあれば大概のメンテナンスページに対応できるかと思います。

# --------------------------------------------------------------------
# // どのURLにアクセスしてもメンテページを表示する
# --------------------------------------------------------------------
<IfModule mod_rewrite.c>

  # -- メンテHTML指定
  ErrorDocument 503 /mainte.html
  RewriteEngine on
  RewriteCond %{REQUEST_URI} !^/mainte.html$

  # -- 画像等のリソースファイルは除外(メンテページから参照されている場合がある為)
  RewriteCond %{REQUEST_FILENAME} !\.(css|jpe?g|gif|png|js)$

  # -- 作業者のIP除外
  RewriteCond %{REMOTE_ADDR} !^202.231.xx.xx$
  RewriteCond %{HTTP:X-Forwarded-For} !^202.232.xx.xx$

  # -- その他、メンテ中に先方で確認するための特定ディレクトリを除外したい場合や別途ページなど
  RewriteCond %{REQUEST_URI} !^/show-ok/
  # RewriteCond %{REQUEST_URI} !^/cgi-bin/

  # -- HTTPレスポンスコード503で返す(ブラウザ上でのURL書き換えは発生しない)
  RewriteRule ^.*$ - [R=503,L]
</IfModule>
# --------------------------------------------------------------------

基本的な動きとしては、指定のURL以外は全てステータスコード503(サービス未提供=メンテ中)で返す、というものです。

# でコメントアウトします。 必要そうな箇所をいじって使いまわしてください。

2015.3.20追記
上記 /mainte.html とある2箇所ですが、ここはホスト名を除いたフルパスをスラッシュから書く必要がありそうです。 うまく動かない場合はいろいろいじってみるといいです。

2019.4.18追記
RewriteCond!=! に修正しました。また、IP除外に %{HTTP:X-Forwarded-For} を追加しました。