mod_rewrite is enabled, but not working

I'm trying to get a PHP routing library set up. They give this example for a .htaccess file:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]

I couldn't get this to work, so I tried enabling mod_rewrite, but it says "Module rewrite already enabled".

Why is it not working properly? Thanks! I'm running Ubuntu Precise 12.04, and apache2.2.22. (Checked for any updates)

EDIT: A couple more details, it's a PuPHPet vagrant build, rewrite should be enabled.

4 Answers

You need to allow the overwrite.

<Directory "/path/to/document/root/"> AllowOverride All
</Directory>
2

First of all, set your httpd configuration to this (the path may differ with one another. In my ubuntu it's placed at /etc/apache2/sites-available/default):

DocumentRoot /var/www
<Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride all Order allow,deny allow from all
</Directory>

After that, you should enable mod_rewrite with this command:

sudo a2enmod rewrite

The last one, restart your apache service:

sudo service apache2 restart

To ensure that, you can check it again from phpinfo in Configuration > apache2handler > Loaded Modules there must be written mod_rewrite and it means mod_rewrite is enabled.

2

I had the similar problem, but the other answers did not helped me. This line at the begining of .htaccess solved my problem:

Options +FollowSymLinks -MultiViews
2

My problem was that I didn't have RewriteEngine on set early on in the file.

<VirtualHost *:80> ServerName &URL& ServerAlias *.&URL& ServerAdmin &EMAIL_ADDRESS& DocumentRoot /var/www/&URL&/public RewriteEngine on # LogLevel: Control the severity of messages logged to the error_log. # Available values: trace8, ..., trace1, debug, info, notice, warn, # error, crit, alert, emerg. # It is also possible to configure the log level for particular modules, e.g. # "LogLevel info ssl:warn" LogLevel debug ErrorLog /var/www/&URL&/storage/logs/apache2_error.log TransferLog /var/www/&URL&/storage/logs/apache2_transfer.log <FilesMatch "\.(cgi|html|php)$"> SSLOptions +StdEnvVars </FilesMatch> # <------------ Here I used to have `RewriteEngine on` # Handle Front Controller... RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d RewriteRule ^ /index.php [L,QSA]
</VirtualHost>

I dont know why but it helped when I placed RewriteEngine on higher up.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like