lowply.github.io/blog

mod_rewriteで時間・期間指定のリダイレクト

これは知らなかった。

TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME

RewriteCondにTIMEで始まる時間・期間指定変数があって、秒単位の細かい指定でURLのリライトができる。例えば午前3時から4時半の間は毎日バッチを走らせるのでメンテ画面に飛ばしたい、とかいう場合は

ErrorDocument 503 /maintenance.html

RewriteEngine on
RewriteCond %{REQUEST_URI} !/maintenance.html
RewriteCond %{TIME_HOUR}%{TIME_MIN} > 0300
RewriteCond %{TIME_HOUR}%{TIME_MIN} < 0430
RewriteRule ^.*$ - [R=503,L]

とか書ける。[1]

今までcronで行なっていたサイトのオープン、クローズ、メンテなどなど、全部これでいいじゃん!なんというスイスアーミーナイフ

ただ、詳細までまとめたドキュメントが見当たらず、いろいろ見た感じだと

  • TIMEの後がそれぞれ年月日時分秒曜日のものは、その数字を返す(月は0-11になるので注意)
  • TIME単体だと曜日以外をまとめた数字が返る
  • 比較演算子 <, >, = を使って条件を作れる

こういうことらしい。

[1] メンテ画面を503で出すのも勉強になった。via mod_rewrite (.htaccess) で簡単メンテナンスモード @ php-tips

see also