Apache Rewrite 学習 : 第03回 システム日付を用いて転送する

投稿者 : OSCA

[PR] "出川哲朗の充電させてもらえませんか?"で登場したロケ地を紹介するファンサイト「あの場所へ行こう!」はこちら。

連載の3回目の今回は、サーバーの日時を用いた Apache Rewrite での転送設定を説明したいと思います。

設定前の注意事項

「Directory コンテキストや .htaccess で転送設定する場合」と「VirtualHost コンテキストで転送設定する場合」とで、検索条件の先頭に「^/」が必要な場合とそうでない場合とがあります。 どちらのディレクティブに設定しようとしているのかを意識してください。 詳しくは以前の記事「ApacheのRewriteを設定する前に知っておくべきこと」を参考にしてください。

本稿では、VirtualHost ディレクティブで転送設定する場合の記述をしています。 Directory ディレクティブや .htaccess に設定する場合は、「^/」の記述を変更して設定してください。

また、今回から RewriteCond ディレクティブを利用します。 RewriteCond について自信がない方は、「Apache RewriteCond の基礎知識」も参考にしてみてください。

サンプル

それではさっそくサンプルを示します。

(1) 2013年09月01日以降のアクセスを転送する

RewriteCond %{TIME_YEAR}%{TIME_MON}%{TIME_DAY} >20130901
RewriteRule ^/campaign1.html$ /close.html [R=302,L]

(2) 2013年09月01日以降のアクセスを転送する ((1)と同じで別の方法)

RewriteCond %{TIME} >20130901235959
RewriteRule ^/campaign1.html$ /close.html [R=302,L]

(3) 期間を指定してアクセスを転送する

RewriteCond %{TIME_YEAR}%{TIME_MON}%{TIME_DAY} >20130901
RewriteCond %{TIME_YEAR}%{TIME_MON}%{TIME_DAY} 20130903
RewriteRule ^/campaign1.html$ /close.html [R=302,L]

(1) は、ある特定の画面(campaign1.html)に 2013年09月01日以降アクセスすると、close.html に転送される例です。 年、月、日の変数を利用して実現しています。 期間限定のページの公開に有効な例です。
記述上の注意点は、比較演算子は”>=”や”=”がありません。 また、比較演算子の後にスペースを入れるとエラーになりました。

(2) は、(1)と同じ事を実現していますが、年月日時分秒を表す変数 %{TIME} を利用して実現した例です。

(3) は、9月2日限定でアクセスを転送させる例です。 このように期間を指定することもできます。

利用できる日付の変数は以下の通りです。

変数意味
%{TIME_YEAR}
%{TIME_MON}
%{TIME_DAY}
%{TIME_HOUR}
%{TIME_MIN}
%{TIME_SEC}
%{TIME_WDAY}曜日 (0:日 ~ 6:土)
%{TIME}年月日時分秒 (例:20130123123456)

おわりに…

 今回は日時の変数を条件に用いてアクセスを転送する例を示しました。 次回は、クエリ変数の値を書き換えてリダイレクトする方法について解説します。

Apacheのトップへ戻る

著者 : OSCA

OSCA

Java, PHP 系のWEBエンジニア。 WEBエンジニア向けコミュニティ「WEBエンジニア勉強会」を主催。 個人として何か一つでも世の中の多くの人に使ってもらえるものを作ろうと日々奮闘中。
@engineer_osca