先日、htmlサイトをメンテナンスモードにする機会がありました。いつもWordpressのプラグインでやっていたので、実はわかっていなかったことが結構あったのでメモしておきたいと思います。
シンプルなサイトメンテナンスのHTMLテンプレート
検索すると海外の綺麗にデザインされたテンプレートが沢山出てきますが、それらはカウントダウンやらメールボタンなどが付いていて、逆にいじりにくいです。
実は欲しいのは、メンテナンスモードの機能があるとてもシンプルなテンプレートのことが多いと思います。
メンテナンスモードは単純にページを用意するだけでなく、.htaccessの対応も必要になります。
今回は使いませんでしたが、以下のメンテナンスページのテンプレートは必要十分です。
GitHub - hilaryquinn/maintenance-page: HTML5/CSS3 Maintenance Page Template - Responsive
HTML5/CSS3 Maintenance Page Template - Responsive. Contribute to hilaryquinn/maintenance-page development by creating an...
レスポンシブ対応にはviewportの指定が必要
シンプルなメンテナンスページのhtmlテンプレだとレスポンシブ対応していないことがあります。
headタグに以下の記述がないとメディアクエリが効かないです。
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
.htaccessの503対応が必要
メンテナンスモード時は全てのアクセスに対して、メンテナンスページを表示しなければなりません。
とはいえ、画像やjsなども対象にしてしまうと、メンテナンスページで参照できなくなりますので、そこは除外します。
また、302を返すのではなく、503を返す必要があります。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
<IfModule mod_rewrite.c>
# -- メンテHTML指定(index.htmlがメンテナンスページの場合)
ErrorDocument 503 /index.html
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/index.html$
# -- 画像等のリソースファイルは除外(メンテページから参照されている場合がある為)
RewriteCond %{REQUEST_FILENAME} !\.(css|jpe?g|gif|png|js)$
# -- HTTPレスポンスコード503で返す(ブラウザ上でのURL書き換えは発生しない)
RewriteRule ^.*$ - [R=503,L]
</IfModule>
まとめ
メンテナンスページを急に用意しなければならなくなった時に、なんで動かないんだろ?と焦らないためにも知っておいた方が良いと思います。