.htaccessファイルでメンテモードにする方法

運用中のWebサイトを .htaccessファイルでメンテナンスモードに切り替える方法を書きます。

メンテ中に表示するページを用意

メンテナンスをしている旨を書いた簡単なHTMLなどのページを “maintenance.html” などの名前で用意します。

メンテ用 .htaccess ファイルを用意

メンテナンスモードに使うための .htaccessファイルを新規に用意するか既存 .htaccessファイルにメンテモード用の記述を追記します。

フルバージョン

<IfModule mod_rewrite.c>
    ## メンテモードで表示するHTMLファイル
    ErrorDocument 503 /maintenance.html

    RewriteEngine On
    
    ## メンテモード用HTMLが存在する場合にメンテモード
    RewriteCond %{DOCUMENT_ROOT}/maintenance.html -f

    ## メンテモード用のHTMLファイルを除外
    RewriteCond %{REQUEST_URI} !=/maintenance.html
    
    ## 画像等リソースファイルを除外
    RewriteCond %{REQUEST_FILENAME} !\.(css|jpe?g|gif|png|js)$
    
    ## 作業者など許可するIPアドレスを設定
    RewriteCond %{REMOTE_ADDR} !=192.168.0.111
    RewriteCond %{REMOTE_ADDR} !=192.168.0.112
    
    #例外として公開しておきたいディレクトリやページ
    RewriteCond %{REQUEST_URI} !^/exception-dir/
    RewriteCond %{REQUEST_URI} !^/exception.html
    
    ## HTTPステータスコード 503 を返す
    RewriteRule ^.*$ - [R=503,L]
</IfModule>

<IfModule mod_headers.c>
    ## メンテ終了予定時刻を指定
    Header set Retry-After "Sun, 14 Jun 2019 7:00:00 GMT"
</IfModule>

簡易版

<IfModule mod_rewrite.c>
    ## メンテモードで表示するHTMLファイル
    ErrorDocument 503 /maintenance.html

    RewriteEngine On

    ## メンテモード用のHTMLファイルを除外
    RewriteCond %{REQUEST_URI} !=/maintenance.html
    
    
    ## 作業者など許可するIPアドレスを設定
    RewriteCond %{REMOTE_ADDR} !=192.168.0.111
    RewriteCond %{REMOTE_ADDR} !=192.168.0.112
    
    ## HTTPステータスコード 503 を返す
    RewriteRule ^.*$ - [R=503,L]
</IfModule>

簡易版の .htaccess では “maintenance.html” の存在確認を省いているため何らかの理由でファイルを上げ忘れると下記のようなエラーメッセージのページが表示されます。

Service Unavailable
The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.
Additionally, a 503 Service Unavailable error was encountered while trying to use an ErrorDocument to handle the request.

コメント

タイトルとURLをコピーしました