How to enable mod_rewrite for Apache 2.2
In order to use mod_rewrite
you can type the following command in the terminal:
sudo a2enmod rewrite
Restart apache2 after
sudo /etc/init.d/apache2 restart
or
sudo service apache2 restart
or as per new unified System Control Way
sudo systemctl restart apache2
Then, if you'd like, you can use the following .htaccess
file.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
The above .htaccess
file (if placed in your DocumentRoot
) will redirect all traffic to an index.php
file in the DocumentRoot
unless the file exists.
So, let's say you have the following directory structure and httpdocs is the DocumentRoot
httpdocs/
.htaccess
index.php
images/
hello.png
js/
jquery.js
css/
style.css
includes/
app/
app.php
Any file that exists in httpdocs will be served to the requester using the .htaccess
shown above, however, everything else will be redirected to httpdocs/index.php
. Your application files in includes/app
will not be accessible.
Try setting: AllowOverride All
.
Second most common issue is not having mod rewrite enabled: a2enmod rewrite
and then restart apache.
For my situation, I had
RewriteEngine On
in my .htaccess
, along with the module being loaded, and it was not working.
The solution to my problem was to edit my vhost entry to inlcude
AllowOverride all
in the <Directory>
section for the site in question.