rewriteでメンテモード
メンテする際は、apacheのrewriteを使用してリクエストをメンテページに飛ばす。
rewriteルール
- 以下↓のルール以外は全てのリクエストをメンテのアナウンスページへ転送する
- 特定IP(社内とか自分の家とか)の場合は転送しない
- バーチャルホストで登録されてる他のURLは転送しない
- 会員登録ページは転送しない
設定
apacheの設定ファイルなんでconfファイルは
/usr/local/apache2.2/conf/httpd.conf
です。
べつにhttpd.confファイルに直で書いてもいいけど、今後の運用を考えて外部ファイルとする。
httpd.confファイルに以下を追加。
Include conf/extra/httpd-rewrite.conf
書く場所はどこでもいい。
./conf/extra配下にhttpd-rewrite.confファイルを作成し、rewriteルールを記述する。
RewriteEngine on RewriteCond %{HTTP_HOST} !^hoge\.piyo\.jp$ RewriteCond %{REMOTE_ADDR} !^123\.45\.67\.89$ RewriteCond %{REMOTE_ADDR} !^123\.12\.12\.12$ RewriteCond %{REMOTE_ADDR} !^192\.168\.12\.1$ RewriteCond %{REQUEST_URI} !^/css/ RewriteCond %{REQUEST_URI} !^/entry RewriteCond %{REQUEST_URI} !^/maintenance/ RewriteRule ^(.*)$ /maintenance/index.html
こんな感じ。
簡単に解説
RewriteCond %{HTTP_HOST} !^hoge\.piyo\.jp$
でバーチャルホストだったら普通に表示。
RewriteCond %{REMOTE_ADDR} !^123\.45\.67\.89$ RewriteCond %{REMOTE_ADDR} !^123\.12\.12\.12$ RewriteCond %{REMOTE_ADDR} !^192\.168\.12\.1$
で特定のIPだったら普通に表示。
RewriteCond %{REQUEST_URI} !^/css/ RewriteCond %{REQUEST_URI} !^/entry RewriteCond %{REQUEST_URI} !^/maintenance/
で登録ページや、メンテナンスページだったら普通に表示。
こじゃれたメンテページでcssつかってたらcssも追加。
RewriteRule ^(.*)$ /maintenance/index.html
それ以外だったらメンテページを表示させると