Using Mod_Rewrite
This isn't an extensive tutorial on using mod_rewrite. I'm just documenting some experiences I've had using rewrite rules. For more information on mod_rewrite see the Apache mod_rewrite documentation http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html or http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html.
Rewrite rules can be added to a .htaccess file in the local folder, or they can be added to the Apache httpd.conf file.
Apache reads the httpd.conf file when it starts up. So after making changes to the httpd.conf file you need to restart Apache for the changes to take effect. The .htaccess file is read with each HTTP request. So changes made to the .htaccess file take effect immediately. This also means that rewrite rules specified in the .htaccess file cause extra overhead as they are loaded with each request.
The examples I've shown here work in a .htaccess file (with the exception of the rewrite log example). You may need to modify the rules slightly to make them work in the httpd.conf file (like adding a leading / to the beginning of the path to match).
Note that rewrite rules that apply a match to a scriptalias folder (eg. /cgi-bin/) will not work in a .htaccess file.
Redirect Homepage
These rules allow you to redirect users to a homepage or script. The following pages requests will get redirected to www.example.com/homepage.
- www.example.com
- www.example.com/index.html
- www.example.com/default.html
Options +FollowSymlinks rewriteEngine on RewriteRule ^default\.html$ http://www.example.com/homepage [R] RewriteRule ^index\.html$ http://www.example.com/homepage [R] RewriteRule ^$ http://www.example.com/homepage [R]
The [R] at the end of the rewrite rule returns a redirect to the browser. This makes the browser update the URL that it shows on the screen. Using [R] will return a 302 (temporarily moved) HTTP response code to the browser. If you want to return a 301 (permanently moved) HTTP response code use [R=301].
Note that the dot in the match expression needs to be escaped with a backslash (\). This is because a dot has a special meaning in regular expressions.
Force Requests to Begin With www
This rule detects requests that begin with example.com and rewrites them to www.example.com.
Options +FollowSymlinks rewriteEngine on rewriteCond %{HTTP_HOST} ^example\.com [NC] rewriteRule ^(.*)$ http://www.example.com/$1 [R=301]
One or more rewrite conditions can precede a rewrite rule. The rewrite rule will only get executed if the rewrite condition is true. The rewrite condition in the example above means that the rewrite rule will only get executed if the HTTP request begins with example.com.
On the next page we'll use rewrite rules to hide file extensions and convert pages to URL parameters...