htaccess

画像、CSSを使ったメンテナンス中画面を表示する .htaccess の書き方。

2014/04/29

Webサイトをメンテナンスする際に、どのURLにアクセスしても「現在メインテナンス中です」というページを表示する .htaccess の作成方法。
表示させる画面に画像やcssを扱いたい場合はひと捻りが必要だったので、忘備録としてポストします。
なお、後半はCPIサーバ編。

メンテナンス中画面表示の.htaccess

メンテナンス中である旨を記したファイル(maintenance.html)を作成。
ロゴ画像、CSSなど、通常通りに作成します。

次に .htaccess ファイル。
「メンテナンス中 .htaccess」でググると簡単に見つかるので、紹介されている内容をコピペしてみます。
簡易版で良いので、以下の様な内容。

軽く内容を解説すると、まず ErrorDocumentディレクティブを /maintenance.html として設定します。
503エラーが起こった際は、/maintenance.html を表示する、という意味合いです。

ちなみにHTTPレスポンスコード503とは、サービスが一時的に過負荷やメンテナンスで使用不可能になっていることを表すレスポンスコードなので、検索エンジンにもメンテナンス中と判断されるので、インデックスされないという特性を持ちます。

次に、Mod Rewriteを使い、/maintenance.html 以外のどのページにアクセスされてもURLの書き換えて 503リダイレクトを行い、結果的に /maintenance.html を表示するという処理が走るよう記述します。

出来上がったら上で作成した maintenance.html と一緒にドキュメントルートにアップロードします。

テストアクセスの結果。

maintenance_false

ありゃ。
画像のリンクも切れてるし、CSSも効いていませんね。
ということで .htaccess を修正。

画像(/img/logo.png)とメンテナンス用のCSS(/css/maintenance.css)は例外的にアクセスを許可してみます。
これで、以下のように表示されました。

maintenance_true

CSSはメンテナンス中ページのヘッダに埋め込んで書けば問題ありませんが、ロゴ画像は使いたい場面は多々あると思うので、覚えておいて損はしない内容ですね。

CPIサーバ編

と、ここまでがWindows版のapache(ローカル環境)だったのですが、本番サーバであるCPIのシェアードサーバにアップすると、なぜか Internal Server Errorが。

maintenance_500

なんでそうなるかを色々と書き換えて調査しましたら、

でエラーになるようです。
CPIの設定でそうなっているのかどうかまでは分からなかったのですが、エラーになるってことは純然たる事実。

ということで、最終的には以下のように書き換えました。
503リダイレクトのところを、302リダイレクトするよう、書き換えています。

HTTPレスポンスコード302は、「リクエストされたリソースは、一時的に異なるURIに属する。」という意味。
一時的に、ってところがミソ。

301と302の違いは、301では「そのリソースは『恒久的に』移動しており、その保存先はLocationに示されるURI」というのに対し、302では「そのリソースが『現時点で』保存されているのは、Locationに示されるURI」ということを示しています。

なかなか癖がありますな、CPI。

-htaccess
-, , ,