リリース作業がある程度の時間かかる場合などにメンテナンス画面を用意したい場合があるかと思います。
その様な場合に、.htaccessを使ってメンテナンス画面を表示する方法についてまとめたいと思います。
まず、下記の様なメンテナンス画面を用意します。
そして、ドキュメントルートへ設置します。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>メンテナンス中です</title>
</head>
<body>
<div style="width:950px; margin:0 auto; background-color:#FFF; padding:50px 0;">
<p style="text-align:center; font-size:24px; font-weight: bold; color:#3498db;">
メンテナンス中です
</p>
<p style="text-align:center; padding:25px 0;">
申し訳ございません。只今メンテナンス中です。<br />
メンテナンスの終了は午前12:00を予定しております。
</p>
<address style="font-style:normal; color:#666; font-size:12px; text-align:center;">
Copyright(C) 1998 plumsa Inc. All Rights Reserved.
</address>
</div>
</body>
</html>
.htaccessの冒頭に以下を追記します。
ErrorDocument 503 /maintenance.html
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !=/maintenance.html
RewriteCond %{REMOTE_ADDR} !=203.0.113.0
RewriteRule ^.*$ - [R=503,L]
</IfModule>
<IfModule mod_headers.c>
Header set Retry-After "Wed, 21 Nov 2017 12:00:00 GMT"
</IfModule>
それぞれの記載の意味を見ていきます。
ErrorDocument 503 /maintenance.html
すべてのアクセスを、503エラーとします。
そして、503エラーの内容を/maintenance.htmlにしているという意味です。
<IfModule mod_rewrite.c>
--(省略)--
</IfModule>
Apacheの「mod_rewrite」というリダイレクト用モジュールを使用することを宣言しています。
RewriteEngine On
mod_rewriteを有効にすることを意味します。
RewriteCond %{REQUEST_URI} !=/maintenance.html
アクセスしたURLが/maintenance.htmlでない場合という条件です。
これにより、/maintenance.html間でのリダイレクトループを防止します。
RewriteCond %{REMOTE_ADDR} !=203.0.113.0
ここで、指定したIPアドレスからのアクセスに対しては、メンテナンス画面を適用しないということを表しています。
ここに自分のアクセス元IPアドレスを指定しておけば、本番環境へのリリース結果を自分だけ確認できるということです。
RewriteRule ^.*$ - [R=503,L]
リダイレクトをかける処理となります。
503エラーのステータスコードでリダイレクトをかけるように指定しています。
Header set Retry-After "Wed, 21 Nov 2017 12:00:00 GMT"
メンテナンス終了予定時刻を指定します。
ここに指定する値は人間のユーザーには基本的に示されません。
参考として追記します。
なお、503エラーについては、下記を念頭に入れておくとよいかと思います。
503エラーはサーバー(ホームページ)が一時的にアクセスできない状態である時のステータスコードで、今回の場合では「ホームページがメンテナンス中のため、一時的にアクセスできません」という意味を持ちます。503エラーであれば、万が一メンテナンス中にGoogleボットからのアクセスがあってもSEOなどに影響を及ぼしません。ただし、あくまで「一時的」な意味となり、数日に渡って503エラーが出たままではページが存在しないと判断されてしまいます。そのため、長時間(24時間以上など)に渡る使用はオススメしません。
『.htaccessで特定のIPアドレス以外をメンテナンスページへリダイレクト』
以上です!
【参考サイト】
『.htaccessで特定のIPアドレス以外をメンテナンスページへリダイレクト』
『メンテナンス表示中に、特定のIPアドレスでサイト確認を行う方法』
『Webサイトのメンテナンス中画面を表示する方法』
『.htaccessを使ってサイトをメンテナンス画面にする』