Apache Mod Rewrite
mod_rewrite is an apache module which enables rewriting of urls requested by client before the pages are fetched by apache.
For example www.site.com/products.php?code=459 can be written as www.site.com/products/459 or www.site.com/products/459.html.
The second url is re-written into the first one by mod_rewrite using rewrite rules specified in the .htaccess file.
Enable Mod Rewrite
To enable the mod_rewrite module use the a2enmod command.
$ sudo a2enmod rewrite
To disable this module :
$ sudo a2dismod rewrite
Next edit the file:
Look for the section :
<directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </directory>
Replace the AllowOverride None with AllowOverride FileInfo as :
<directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride FileInfo Order allow,deny allow from all </directory>
Now restart apache
$ sudo /etc/init.d/apache2 restart
Test Htaccess Rules
Now place an .htaccess file in say /var/www/ folder to test mod rewrite
To test whether mod_rewrite is working or not, fill the .htaccess file with some garbage text save and then open some file of that folder in the browser.
You should get a 500 Internal Server Error and a .htaccess error in the apache log file. This shows that now mod_rewrite is enabled.
Now put some rewrite rules in the .htaccess file
RewriteEngine on RewriteRule ^([0-9]+).html$ index.php?id=$1
which should replace a folder/23.html to folder/index.php?id=23 for example.
Links and Resources
For further details and instructions on setting up mod rewrite and writing htaccess rules, check out the official doc page. Some of the links are given below:
1. Apache 1.3 mod rewrite
AllowOverride FileInfo did not work for me. I used AllowOverride All and it worked.
I love you man! I spent hours tweaking config files and modules, and this line saved me
Instead of allowing all, do this. Worked for me. <3
Awesome! That fixed a problem that had cost me hours of frustration. Thanks!