Let’s Encrypt に配慮しつつ503でメンテナンスページを表示させる .htaccess

Webサイトの新規開設等の準備段階で「メンテナンスページを503として表示させたい、 Let’s Encrypt によるSSL証明書導入の設定もしたい」というケースの .htaccess のスニペットです。

ErrorDocument 503 /maintenance.html

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_URI} !=/maintenance.html
  RewriteCond %{REQUEST_URI} !\.(css|js|jpg|gif|png|svg|ico|xml|otf|ttf|woff|woff2)$
  RewriteCond %{REQUEST_URI} !(^/.well-known/)
  RewriteRule ^.*$ - [R=503,L]
</IfModule>

<IfModule mod_headers.c>
  Header set Retry-After "Tue, 1 Mar 2022 12:00:00 GMT"
</IfModule>

例えばこんなイメージ。各行を開設すると以下のような感じです。

  • ErrorDocument 503 /maintenance.html: 503 エラー用のページは maintenance.html
  • 条件指定
    • RewriteCond %{REQUEST_URI} !=/maintenance.html: メンテナンスページ (maintenance.html) は除く
    • RewriteCond %{REQUEST_URI} !\.(css|js|jpg|gif|png|svg|ico|xml|otf|ttf|woff|woff2)$: cssやjs, 画像, フォント等のページ表示に必要なリソースは除く
    • RewriteCond %{REQUEST_URI} !(^/.well-known/): Let’s Endrypt でアクセスされる /.well-known/ 以下のディレクトリは除く
    • RewriteRule ^.*$ - [R=503,L]: 上述3つの条件のいずれも満たさないページへのアクセスは 503 (=maintenance.html)へ
  • Header set Retry-After "Tue, 1 Mar 2022 12:00:00 GMT": 2022/3/1 12時(GMT) 公開予定

これでひとまず準備できるのではないでしょうか。

参考

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。