ウェブサイトやシステムのメンテナンスを行うとき、『自分のアクセス・自社からのアクセスは通常通りサイトを表示し、それ以外はメンテナンス・ページに飛ばしたい』というケースがあります。この記事では、それを実現する「.htaccess」の書き方をご紹介します。なお「LB:ロードバランサ」を使用している場合にも対応します。
目次
メンテナンス・ページの準備
ドキュメントルート直下に、メンテナンス・ページを「maintenance.html」というファイル名で設置します。
【メンテナンス・ページ(maintenance.html)の例】
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>メンテナンス中</title>
</head>
<body>
<div style="text-align:center;margin-top:5em;">
<h1>メンテナンス中です</h1>
</div>
</body>
</html>
「.htaccess」の記述
例として、通常のアクセスを許可する(メンテナンス・ページに飛ばさない)IPアドレスを、「111.222.333.444」とします。
ErrorDocument 503 /maintenance.html
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/maintenance\.html$
# 許可IP
RewriteCond %{HTTP:X-Forwarded-For} !^111.222.333.444$
RewriteCond %{REMOTE_ADDR} !^111.222.333.444$
RewriteRule ^(.*)$ / [R=503,L]
</IfModule>
もし、許可IPが複数ある場合は、次のように追加してあげればOKです。
ErrorDocument 503 /maintenance.html
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/maintenance\.html$
# 許可IP-1
RewriteCond %{HTTP:X-Forwarded-For} !^111.222.333.444$
RewriteCond %{REMOTE_ADDR} !^111.222.333.444$
# 許可IP-2
RewriteCond %{HTTP:X-Forwarded-For} !^aaa.bbb.ccc.ddd$
RewriteCond %{REMOTE_ADDR} !^aaa.bbb.ccc.ddd$
RewriteRule ^(.*)$ / [R=503,L]
</IfModule>
既存の「.htaccess」がある場合は、なるべく上の方に追記するようにします。例えば、WordPressで運営しているサイトの場合は、以下のように、WordPressが追加した記述の上に追記します。
ErrorDocument 503 /maintenance.html
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/maintenance\.html$
# 許可IP
RewriteCond %{HTTP:X-Forwarded-For} !^111.222.333.444$
RewriteCond %{REMOTE_ADDR} !^111.222.333.444$
RewriteRule ^(.*)$ / [R=503,L]
</IfModule>
# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
特定IPアドレスからのアクセスは通常通り処理し、それ以外のIPアドレスからのアクセスはメンテナンス・ページに飛ばす「.htaccess」の書き方の解説は以上です。
「.htaccess」は、書き方をちょっと間違えると、途端に「サーバーエラー」になってしまいます。テスト環境等で事前にテストを実施することが望ましいです。