サーバOSのアップデートなど、時間がかかるメンテナンスを行う時に
ユーザからどこのページにアクセスされたとしても大丈夫なようにメンテナンス画面を出したい!
トップだけ出してても他のページにアクセスされたらかっこわるいしね〜
しかーも、1つのメンテナンス画面を作っといてリダイレクトされれば超楽じゃん!!
あと1点問題が、検索エンジンがメンテ中に来ちゃってキャッシュされたらこれもまたかっこ悪い。検索エンジンには503と教えてあげると一時的にアクセスできないのね。また来ようってなってくれるようです。
もう1点!
メンテナンスは確認するクライアントさんと作業する自分達のIPからだけはメンテナンス画面じゃなくって本体を見たい!
この3つを組み合わせたものが作りたい!
1)mod_rewriteを設定する(mod_rewriteだけでは503のエラーを出せないのでphpで実現させる)
.htaccessに
RewriteEngine on
RewriteRule ^503/ – [L]
RewriteRule ^.*$ 503/503.php
と書く
設定されているディレクトリ以下が503ディレクトリ以外全部 /503/503.phpに飛ぶ
2)特定IPだけは503に行きたくないので
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^000\.000\.000\.1$
RewriteCond %{REMOTE_ADDR} !^000\.000\.000\.2$
RewriteCond %{REQUEST_FILENAME} !503.php
RewriteRule ^.*$ /503/503.php [L]
</IfModule>
RewriteCond %{REMOTE_ADDR} !^000\.000\.000\.1$
に見たいIPを書きます。今回は2箇所見たいので2行書きます。
3)つぎに/503/503.php に次のように書きます
<?php
header (‘HTTP/1.0 503 Service Temporarily Unavailable’);
include(dirname(__FILE__) . ‘/maintenance.html’);
?>
4)飛ばす/503/maintenance.html作成します
ここで注意です。
画像のリンクやCSSがあると今はそこもアクセスが出来なくなっているので.htaccessに書き加えないと見えません><(超はまりました;;)
5)maintenance.htmlに画像やCSSのリンクがあるので.htaccessを編集します
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !\.(css|gif|jp?g|png|js)$
RewriteCond %{REMOTE_ADDR} !^000\.000\.000\.1$
RewriteCond %{REMOTE_ADDR} !^000\.000\.000\.2$
RewriteCond %{REQUEST_FILENAME} !503.php
RewriteRule ^.*$ /503/503.php [L]
</IfModule>
RewriteCond %{REQUEST_URI} !\.(css|gif|jp?g|png|js)$
これはCCSや画像は見えてもおkってことです。
これがわからなくってCSSも画像もパスあってるのに読み込まなくて涙目でした><
見えなくていい場合には書かなくて大丈夫です。
これで作業完了!
参考:ありがとうございました!
http://labs.unoh.net/2007/07/post_93.html
http://pm.11op.net/mod-rewrite/
コメント