Skip to content

Using Apache’s mod_rewrite on Windows

I recently happened to experiment with Apache’s mod_rewrite, an excellent library to change your machine friendly (or perhaps program friendly?) web urls into user friendly urls.

The steps to make mod_rewrite to work on Windows is-
– Edit httpd.conf for Apache, and uncomment the following line
# LoadModule rewrite_module modules/mod_rewrite.so
-to-
LoadModule rewrite_module modules/mod_rewrite.so

– Next, under <Directory “{Your document root}“> change
AllowOverride None
-to-
AllowOverride All

– Restart Apache

– Create a sample folder “rewrite” under {Your document root}, with the following files
{Your document root}
 
rewrite
    .htaccess
    details.php

– What we will attempt now is to have a url like http://localhost/rewrite/details/shantibhushan to be automatically executed as http://localhost/rewrite/details.php?user=shantibhushan

– Edit your .htaccess file as follows
<IfModule rewrite_module>
 RewriteEngine on
 RewriteBase /rewrite/
 RewriteRule ^details/(.+)$ details.php?user=$1 [L]
</IfModule>

– The RewriteRule is the actual line where we specify what url is to be mapped to which actual url. ^details/(.+)$ takes a user friendly url /details/shantibhushan and extracts “shantibhushan” as $1. It then replaces $1 into details.php?user=$1 resulting in details.php?user=shantibhushan as the actual url.

– Edit details.php as follows
<?php
$user= $_REQUEST[‘user’];
print(“<h1>$user</h1>”);
?>

– The above sample simply takes “user” from details.php?user={user} and shows it back.

– Done! Try accessing http://localhost/rewrite/details/shantibhushan and you should see details.php getting called with parameter as “shantibhushan”

TODO
– Simply accessing details/ results in error, and rewrite rule doesn’t assume such a case. It can be handled by RewriteCond
– First I wanted to have details:shantibhushan as the url, but this has a bug on Windows not allows : in path. It seems to work fine on non-Windows.
– The example assumes Apache is running on port 80 on your machine.

Leave a Reply

Your email address will not be published. Required fields are marked *

three × one =