How to enable mod_rewrite for Apache 2.2

apache, mod-rewrite

Solution

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.

Problem

I've got fresh install of Apache 2.2 on my Vista machine, everything works fine, except mod rewrite. I've uncommented ``` LoadModule rewrite_module modules/mod_rewrite.s ``` but none of my rewrite rules works, even simple ones like ``` RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404 ``` All the rules I'm using are working on my hosting, so they should be ok, so my question is, is there any hidden thing in apache configuration, that could block mod rewrite?

Original source