2007-09-09
■[mod_rewrite]簡単に特定IPからのアクセス以外ならメンテナンス画面を出してみる
ウノウラボさんのエントリ、メンテナンス画面を簡単に出してみるを参考に、以下を .htaccess だけで実現してみる
- まず、こういうことらしいので、何も考えずに 503 エラーを吐く 503.php を用意。
mod_rewriteでは300番系のエラーを出すことができますが、503のエラーは出せないようなので メンテナンス画面を簡単に出してみる
- 次に、ドメイン下全てを 503 へ Rewrite してやる。
- その時に、「自分の IP 以外は」を付ける
- そのままでは不安なので、さらに自分の IP のみ、認証下に置く
以上を実現してみたのが、以下。
PHP の部分は丸パクリ。すいませんすいません。
503/503.php
<?php header ('HTTP/1.0 503 Service Temporarily Unavailable'); include(dirname(__FILE__) . '/maintenance.html'); ?>
503/maintenance.html
<html> <body> <h1>メンテナンス中ですよ</h1> </body> </html>
{*.*.*.*} のとこに、自分の IP を、 {path} のとこにパスワードファイルへの絶対 path を入れる
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !{*.*.*.*}
RewriteCond %{REQUEST_FILENAME} !503.php
RewriteRule ^.*$ /503/503.php [L]
</IfModule>
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /{path}/.htpasswd
require valid-user
Satisfy Any
Order Allow,Deny
Allow from all
Deny from {*.*.*.*}
.htaccess がややこしいけど、こんなことが起きてる(と思う)
で、携帯片手に 503 になってることを確認しつつ、PC から設定作業を行うと。
うちは業務では FTP オンリーのレンタルサーバーを使用することがほとんどなので、
システムの入れ替え時にどうしてもサイトを落とす必要が発生してしまう。
設定途中のサイトにアクセスされるとまずいけど、誰もアクセスしないような深夜作業なんていやだしね。
(そもそも、問題の解決方法として間違ってると思うし)
ってことで考えたのがこの方法。
