MyController

WEB業界素人の僕がまた見返しそうなことのメモです。

メンテナンス画面を出す|リニューアルするときに使える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]