Time-dependant rewriting uses mod_rewrite and apache server time variables to display different files depending on the time, while the URL stays the same. An often requested implementation of this is to display a different home page or image depending on if its morning, noon, or night.

Its also great for locking down access to a file or directory so that it can only be viewed on a certain day, whether that day is a Tuesday or July 10, 2007 is up to you! Another cool use is being able to implement a sort of load-balancing system.

For instance, say you have an mp3 hosted at http://site1.com/1.mp3 but you need to cut the number of requests on that server in half to meet bandwidth restrictions you can use Time Dependent rewriting to force every download request made in the last 30 seconds of every minute to download from an alternate site like http://mirror1.com/1.mp3. You could in fact serve the same file from 60 different servers depending on what second (TIME_SEC) the request was made. Apache mod_rewrite is sweet!

Time and Date RewriteCond Variables

current four-digit year
current month (0-11)
current date
current hour (0-23)
current minute (0-59)
current second-count (0-59)
current week-day (0-6)
a formatted string representing the time ex. 20070710212132

mod_rewrite code to output current TIME variables

Use this mod_rewrite code in your .htaccess file to find out what your servers current variables are. Simply uncomment whichever line (one at a time) you want to see the value for, and request any file from your site. So http://site.com/index.html would redirect you to http://site.com/index.html?time=2007 if you had uncommented the TIME_YEAR line.

RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} !time [NC]
#RewriteCond %{TIME} ^(.*)
#RewriteCond %{TIME_YEAR} ^(.*)
#RewriteCond %{TIME_MON} ^(.*)
#RewriteCond %{TIME_WDAY} ^(.*)
#RewriteCond %{TIME_DAY} ^(.*)
#RewriteCond %{TIME_HOUR} ^(.*)
#RewriteCond %{TIME_MIN} ^(.*)
#RewriteCond %{TIME_SEC} ^(.*)
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI}?time=%1 [R,L]

Displaying 1 of 2 files every 30 seconds

This code rewrites requests for http://www.askapache.com/dream/ to /promo.php during the first 30 seconds of every minute, and during the last 30 seconds it instead serves /promo1.php. I came up with this basic example to experiment further on Boosting DreamHost Referrals.

RewriteEngine On
RewriteBase /

RewriteCond %{TIME_SEC} <30
RewriteRule ^dream/?$ /promo.php [L]
RewriteCond %{TIME_SEC} >29
RewriteRule ^dream/?$ /promo1.php [L]

If Server is -3 hours slow

This code instructs apache to serve alternate versions of a webpage depending on the time of day.. one of my clients wanted this feature to be able to show different images (sun + moon) and show different content depending on what part of the day it was. You could also use this with css files to have really easy method of showing your funky side!

Options +FollowSymLinks
RewriteEngine On
RewriteBase /

# 5am > < 8am
RewriteCond %{TIME_HOUR} >02
RewriteCond %{TIME_HOUR} <05
RewriteRule ^index\.html$ /morning/index.html

# 8am > < 4pm
RewriteCond %{TIME_HOUR} >05
RewriteCond %{TIME_HOUR} <13
RewriteRule ^index\.html$ /midday/index.html

# 4pm > < 10pm
RewriteCond %{TIME_HOUR} >13
RewriteCond %{TIME_HOUR} <19
RewriteRule ^index\.html$ /afternoon/index.html

# 10pm > < 5am
RewriteCond %{TIME_HOUR} >19
RewriteCond %{TIME_HOUR} <02
RewriteRule ^index\.html$ /night/index.html