メンテナンス画面を出す|リニューアルするときに使えるhtaccessの設定
renewal.htmlがドキュメントルート直下にあるとき
ErrorDocument 503 /renewal.html
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !=/renewal.html
RewriteRule ^.*$ - [R=503,L]
</IfModule>
503エラーになるので検索エンジンも一時的としてみてくれて、
このページがインデックスされることもない。
アクセスして来たらrenewal.htmlが表示されるが、URLはアクセスしてきたままとなる。
注意としては
CSSとかもリダイレクトされてしまうので直書きにする。
ディレクトリで切る方法
<IfModule mod_rewrite.c>
RewriteEngine On
#メンテナンス画面に全てリダイレクト maintenance
RewriteCond %{REQUEST_URI} !(/maintenance/)
RewriteCond %{REQUEST_FILENAME} !^(.*)\.(gif|png|jpg|jpeg|css)$ [NC]
RewriteRule ^.*$ /maintenance/ [R=302,L]
</IfModule>
これならCSS直書きしなくてもいける。
↑画像もリダイレクトしないようにしてる。
複数条件のリダイレクト
#メンテナンス画面に全てリダイレクト maintenance
RewriteCond %{REQUEST_URI} !(maintenance)
RewriteCond %{REMOTE_ADDR} !^(自分のグローバルアドレス)$
RewriteCond %{REQUEST_FILENAME} !^(.*)\.(gif|png|jpg|jpeg|css)$ [NC]
RewriteRule ^.*$ /maintenance/ [R=302,L]
→最後のルールでメンテに飛ばす。
ただし無限ループになるのでメンテナンスディレクトリは除外。
自分のグローバルアドレス以外。つまり全部が対象という意味。
#自分のIPからもリダイレクトはさせても管理画面が見れるようにする
RewriteCond %{REQUEST_URI} !(maintenance)
RewriteCond %{REQUEST_URI} !(管理画面のディレクトリ名)
RewriteCond %{REMOTE_ADDR} ^(自分のIPアドレス)$
RewriteRule ^.*$ /maintenance/ [R=302,L]
→基本は上と同じ。
地味に違うのが自分のアドレスをNOTじゃなく正としていて、
管理画面を追加しているのみ。
ルールの最後のLで終わってるので同じhtaccessに続けて書いて問題ない。
確認するときはWIFIなどで自分のIPアドレスを変えてあげる。
他に覚えたことで重要なこと
RewriteCond %{REQUEST_URI} !(/maintenance/) [OR]
RewriteCond %{REQUEST_FILENAME} !^(.*)\.(gif|png|jpg|jpeg|css)$ [NC]
RewriteCond %{REQUEST_URI} !(/main/)
RewriteCond %{REMOTE_ADDR} !^(xxxxxxxxxx)$
RewriteRule ^.*$ /maintenance/ [R=302,L]
こうすると、
ORとANDはちょっと変だけどこうなる。
RewriteCond %{REQUEST_URI} !(/maintenance/)と
RewriteCond %{REQUEST_FILENAME} !^(.*)\.(gif|png|jpg|jpeg|css)$ [NC]
がORとなってまず先に評価される。
また、
RewriteCond %{REQUEST_URI} !(/main/)
RewriteCond %{REMOTE_ADDR} !^(xxxxxxxxx)$
ここがANDになってORのあとで評価されるので注意。
最後はルールのリダイレクトが実行される。
RewriteRule ^.*$ /maintenance/ [R=302,L]