#010
posted on 2020.12.30
サイトメンテナンス用にIPアドレスで振り分けてリダイレクト。
CATEGORY
Apacheのモジュール「mod_rewrite」を.htaccessに記述して、アクセス元のIPアドレスによって条件分岐し、HTTPステータスコード503でリダイレクトさせる。
ステータスが503の場合の表示用のファイル (今回は「maintenance.php」) を用意して指定したディレクトリに設置する。
※ .htaccessのパーミッションは604にする。 (644を推奨しているレンタルサーバーもある。)
503 (Service Unavailable)は、サーバーのメンテナンスや、アクセス超過によるサーバー負荷対策のため、一時的にアクセス制限していることを表すステータスコード。
ErrorDocument 503 /maintenance.php
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/maintenance\.php$
RewriteCond %{REMOTE_ADDR} !^XXX.XXX.XXX.XXX$
RewriteRule ^(.*)$ - [R=503,L]
<IfModule>
リクエストされたURLが「/maintenance.php」でない場合で、リモートのIPアドレスが「XXX.XXX.XXX.XXX」でない場合に、ステータスコード503でトップディレクトリにリダイレクト。
ErrorDocument
第1引数にエラーのステータスコード、第2引数に該当コードのエラー発生時に表示するファイルのパスを指定。
<IfModule mod_rewrite.c>
モジュールのmod_rewriteが有効かどうかを確認するif文。
RewriteCond
RewriteCondは、URL書き換えを行う場合の条件を定義する条件分岐の構文。
マッチした場合だけ、直後のRewriteRuleが処理される。
RewriteRule
RewriteRuleは、URL書き換えを実行する構文。
第1引数にマッチした場合に第2引数を実行。
– : 何もしない(URLを書き換えない)。全てのアクセスをトップページに移動させる場合は「-」を「/」にする。
mod_rewriteの詳細は前の記事参照。