BLOG

最終更新日:
公開日:

WEB制作

.htaccessで特定のIPアドレス以外をメンテナンスページへリダイレクト

ホームページを一時的にメンテナンスするとき、作業用のIPアドレス以外からのアクセスは全てメンテナンスページへリダイレクトしたい場合があります。今回は「.htaccess」のリダイレクトを使ってアクセス制御する方法を解説。

目次

メンテナンス時の理想的なアクセス制御

ホームページ(Webサイト)を運用していたら、必ず一定の時期ごとに定期メンテナンス、リニューアル、サーバーの移管などを行う場面があると思います。
作業中はホームページが不完全なため、作業者以外のアクセスは防ぎたい。
でもホームページ自体を落とすことはあり得ない。
その結果、理想的な対応は作業者のみいつも通りアクセスできて、それ以外のアクセスに対しては一時的にメンテナンスページを表示する、というものになります。

これを実現する方法の1つに、「IPアドレス」を使ってアクセスを制御する方法が挙げられます。
仮に、作業者のIPアドレスが「127.0.0.1」だとしましょう。
このIPアドレスからのアクセスに対してはいつも通りホームページを表示するようにし、それ以外のIPアドレスは全てメンテナンスページへ強制的にリダイレクト(503コード)がかかるように設定します。

この処理を「.htaccess」で書くと、次のようになります。

.htaccess記述例:

ErrorDocument 503 /maintenance.php

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/maintenance\.php$
RewriteCond %{REMOTE_ADDR} !^127.0.0.1$
RewriteRule ^(.*)$ / [R=503,L]
</IfModule>

コードの意味はこれから詳しく見ていきますが、取り急ぎコピペして使いたい場合は1行目と5行目のメンテナンスページを指定しているパス「/maintenance.php」と、6行目の「127.0.0.1」をアクセス許可したいIPアドレスに置き換えればOKです。
5行目は正規表現の記述となるため、「.(ドット)」の前に「\(バックスラッシュ)」を忘れずにつけてください。

コードの解説

ここからは「.htaccess」に記述した内容を1つずつ確認していきましょう。

ErrorDocument 503 /maintenance.php

1行目は503エラー時に表示するページを指定しています。

<IfModule mod_rewrite.c>
途中省略...
</IfModule>

3行目と8行目は必ずセットで使用します。
WebサーバーはApache(アパッチ)というソフトウェアで動いていますが、Apacheの「mod_rewrite」というリダイレクト用モジュールの使用をここで宣言しています。
そのため、リダイレクトに関わる記述は<IfModule mod_rewrite.c></IfModule>の間に書く必要があります。

RewriteEngine On

4行目の記述はリダイレクトに関する記述の「開始の合図」。
3行目で宣言したモジュールを、ここで有効にしています。

RewriteCond %{REQUEST_URI} !^/maintenance\.php$
RewriteCond %{REMOTE_ADDR} !^127.0.0.1$

5行目、6行目はリダイレクトをかけるか判断する処理になります。
1行に1つの条件式を書いており、この2つは「AND」指定のため、どちらの条件にも該当した場合のみリダイレクト処理を行います。

個別に書かれた条件を見ていくと、5行目は、「/maintenance.php」へのアクセスでないことを確認する内容です。
もしメンテナンスページへのアクセスが要求されている場合は該当しないため、そのままメンテナンスページが表示されます。

6行目はIPアドレスが「127.0.0.1」でないことを確認する処理です。
ここで作業者からのアクセスか、そうでないかを判断します。

RewriteRule ^(.*)$ / [R=503,L]

リダイレクトをかける処理です。
特に「R=503」の部分が非常に重要。
503エラーのステータスコードでリダイレクトをかけるように指定していて、結果として1行目に指定した503エラーのページが表示される仕組みになっています。

ちなみに、503エラーはサーバー(ホームページ)が一時的にアクセスできない状態である時のステータスコードで、今回の場合では「ホームページがメンテナンス中のため、一時的にアクセスできません」という意味を持ちます。
503エラーであれば、万が一メンテナンス中にGoogleボットからのアクセスがあってもSEOなどに影響を及ぼしません。
ただし、あくまで一時的な意味となり、数日に渡って503エラーが出たままではページが存在しないと判断されてしまいます。
そのため、長時間(24時間以上など)に渡る使用はオススメしません。

以上、メンテナンス時の「.htaccess」によるアクセス制御についてでした。
.htaccess」自体の基本的な文法についてはまた改めてまとめます。

前のページへ 一覧に戻る 次のページへ