Monday, December 22, 2008

mod_rewrite and Apache

Mod_rewrite allows you to rewrite a webpage's url on the fly, and you can rewrite the url to almost anything. It has a lot of uses everything from redirecting multiple WebPages to a new domain without actually changing the title, to making dynamic pages appear static.

However, it is somewhat complicated to learn, and if you make a mistake its also possible to really mess-up your server and create endless loops. Need less to say I don't recommend messing around with this on you live site. The solution, if you want to mess around and experiment with it is, to run a test server on your own computer for test purposes.

My own server ?

Apache by default comes with the mod_rewrite module installed but not enabled. So if you have Apache installed on your home computer chances are that all you have to do is enable mod_rewrite (explained later in this tutorial).

If you don't have Apache installed, you can install it yourself, or get one of the many Apache, php, mysql bundles and install it yourself fairly easily. Most (if not all) of these bundles use the default settings, and mod_rewrite is not enabled by default, so come back and read this tutorial once you are done installing apache web server.

Enable mod_rewrite

1. Find the httpd.conf file (usually you will find it in a folder called conf, config or something along those lines)
2. Inside the httpd.conf file uncomment the line LoadModule rewrite_module modules/mod_rewrite.so (remove the pound '#' sign from in front of the line)
3. Also find the line ClearModuleList is uncommented then find and make sure that the line AddModule mod_rewrite.c is not commented out.

Check to see if mod_rewrite is enabled

There are several ways to check if its working, I will try to show you the simplest method, Create a .htaccess file (a text file named .htaccess) with the following code in it

Options +FollowSymLinks
RewriteEngine On

Save the file to a subdirectory of your main site something like this
/rewrite-testfolder/.htaccess

Now attempt to browse to the subdirectory (http://localhost/rewrite-testfolder/). One of two things could happen

- No errors Congrats mod_rewrite engine is now enabled.

- 500, Internal Server Error If you get this message then mod_rewrite was not installed/enabled on your computer.