.htaccessで特定のIP以外をメンテナンス画面にリダイレクトしたい

ウェブサイトをメンテナンスする際、一時的に「メンテナンス画面」を表示させることがあります。今回は、.htaccessを使って、特定のIPアドレス(管理者)以外のユーザーをメンテナンス画面にリダイレクトする方法をご紹介します。

メンテナンス画面用のファイルを用意する

まずは、メンテナンス中であることを訪問者に知らせるページを作成します。ここでは、maintenance.htmlというファイル名で用意したとします。

このファイルには、以下の内容を入れておくのがおすすめです。

  • メンテナンス中であることのお知らせ(例:ただいまウェブサイトのメンテナンスを行っております。)
  • メンテナンスの期間・予定時間(例:●月●日 ●時〜●時頃まで(予定))
  • お問い合わせ先(メールアドレスや電話番号など)

作成したmaintenance.htmlは、サイトのドキュメントルートにアップしてください。

.htaccessの設定

次に、.htaccessに設定を追加します。ここでは、特定のIPアドレス(管理者)以外のユーザーをメンテナンス画面へリダイレクトさせます。

ErrorDocument 503 /maintenance.html

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_URI} !=/maintenance.html
  RewriteCond %{REMOTE_ADDR} !=192.0.2.123
  RewriteCond %{REMOTE_ADDR} !=192.0.3.123
  RewriteRule ^.*$ - [R=503,L]
</IfModule>

<IfModule mod_headers.c>
  Header set Retry-After "Wed, 21 May 2025 12:00:00 GMT"
</IfModule>

コードの説明

  • ErrorDocument 503 /maintenance.html
    → 503エラー時にmaintenance.htmlを表示
  • RewriteCond %{REQUEST_URI} !=maintenance.html
    → アクセス先のURLが/maintenance.htmlでない場合はリダイレクトしない
  • RewriteCond %{REMOTE_ADDR} !=192.0.2.123
    RewriteCond %{REMOTE_ADDR} !=192.0.3.123

    → 管理者以外のIPアドレスに制限をかける
  • RewriteRule ^.*$ – [R=503,L]
    → 上記条件に一致した場合、503を返して終了
  • <IfModule mod_headers.c>
    Header set Retry-After "Wed, 21 May 2025 12:00:00 GMT"
    </IfModule>

    → HTTPヘッダーにRetry-Afterを追加(検索エンジンなどに再アクセス時期を通知)

以上の方法で、特定のIPアドレス(管理者)以外のユーザーをメンテナンス画面へリダイレクトできます。メンテナンス終了後は、maintenance.htmlと.htaccessの該当設定を削除するのを忘れないようにしましょう

参考サイト