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

それ以外だったらメンテページを表示させると