Reputation: 87210
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?
Upvotes: 551
Views: 1548907
Reputation: 9465
Try setting: AllowOverride All
.
Second most common issue is not having mod rewrite enabled: a2enmod rewrite
and then restart apache.
Upvotes: 98
Reputation: 901
Use below command
sudo a2enmod rewrite
And the restart apache through below command
sudo service apache2 restart
Upvotes: 10
Reputation: 12526
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.
Upvotes: 1145
Reputation: 2481
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.
Upvotes: 248
Reputation: 7476
Old thread, just want to put that don't set AllowOverride to all instead use specific mod you want to use,
AllowOverride mod_rewrite mod_mime
And this line should be un-commented
LoadModule rewrite_module modules/mod_rewrite.so
Refrences
Upvotes: 7
Reputation: 1132
If non of the above works try editing /etc/apache2/sites-enabled/000-default
almost at the top you will find
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
Change the AllowOverride None
to AllowOverride All
this worked for me
Upvotes: 93
Reputation: 4948
Open terminal and typin a2enmod rewrite
, It will enable your mod_rewrite
module for Apache.
Then go to /etc/apache2/sites-available
and edit default file. (For this you must have writable permissions to this file and sites-available folder.)
Replace below with existing lines 4 to 14
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
Now restart your apache by /etc/init.d/apache2 restart
or service apache2 restart
Take clean URL test again and this time it will be passed.
Upvotes: 34
Reputation: 1430
I just did this
sudo a2enmod rewrite
then you have to restart the apache service by following command
sudo service apache2 restart
Upvotes: 8
Reputation: 6100
New apache version has change in some way. If your apache version is 2.4 then you have to go to /etc/apache2/
. There will be a file named apache2.conf
. You have to edit that one(you should have root permission). Change directory text like this
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Now restart apache.
service apache2 reload
Hope it works.
Upvotes: 59
Reputation: 111
The first time I struggled with mod_rewrite rules ignoring my traffic, I learned (frustratingly) that I had placed them in the wrong <VirtualHost>
, which meant that my traffic would ignore all of them no matter how well-written they were. Make sure this isn't happening to you:
# Change the log location to suit your system.
RewriteLog /var/log/apache-rw.log
RewriteLogLevel 2
These parameters will activate if you perform a graceful restart of Apache, so you can recycle them in and closely monitor the mod_rewrite behavior. Once your problem is fixed, turn the RewriteLogLevel back down and celebrate.
In 100% of my experience, I've found that the RewriteLog has helped me discover the problem with my rewrite rules. I can't recommend this enough. Good luck in your troubleshooting!
Also, this bookmark is your best friend: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritelog
Upvotes: 4
Reputation: 891
There are many ways how you can fix this issue, if you know the root of the issue.
Problem 1
Firstly, it may be a problem with your apache not having the mod_rewrite.c module installed or enabled.
For this reason, you would have to enable it as follows
Open up your console and type into it, this:
sudo a2enmod rewrite
Restart your apache server.
service apache2 restart
Problem 2
You may also, in addition to the above, if it does not work, have to change the override rule from the apache conf file (either apache2.conf, http.conf , or 000-default file).
Locate "Directory /var/www/"
Change the "Override None" to "Override All"
Problem 3
If you get an error stating rewrite module is not found, then probably your userdir module is not enabled. For this reason you need to enable it.
Type this into the console:
sudo a2enmod userdir
Then try enabling the rewrite module if still not enabled (as mentioned above).
To read further on this, you can visit this site: http://seventhsoulmountain.blogspot.com/2014/02/wordpress-permalink-ubuntu-problem-solutions.html
Upvotes: 35
Reputation: 19467
What worked for me (in ubuntu):
sudo su
cd /etc/apache2/mods-enabled
ln ../mods-available/rewrite.load rewrite.load
Also, as already mentioned, make sure AllowOverride all
is set in the relevant section of /etc/apache2/sites-available/default
Upvotes: 3
Reputation: 3753
In Ubuntu:
Run:
a2enmod rewrite
and then:
service apache2 restart
mod_rewrite
will now be enabled!
Upvotes: 49
Reputation: 533
<edit>
Just noticed you said mod_rewrite.s instead of mod_rewrite.so - hope that's a typo in your question and not in the httpd.conf file! :)
</edit>
I'm more used to using Apache on Linux, but I had to do this the other day.
First off, take a look in your Apache install directory. (I'll be assuming you installed it to "C:\Program Files" here)
Take a look in the folder: "C:\Program Files\Apache Software Foundation\Apache2.2\modules" and make sure that there's a file called mod_rewrite.so in there. (It should be, it's provided as part of the default install.
Next, open up "C:\Program Files\Apache Software Foundation\Apache2.2\conf" and open httpd.conf. Make sure the line:
#LoadModule rewrite_module modules/mod_rewrite.so
is uncommented:
LoadModule rewrite_module modules/mod_rewrite.so
Also, if you want to enable the RewriteEngine by default, you might want to add something like
<IfModule mod_rewrite>
RewriteEngine On
</IfModule>
to the end of your httpd.conf file.
If not, make sure you specify
RewriteEngine On
somewhere in your .htaccess file.
Upvotes: 15
Reputation: 5230
There's obviously more than one way to do it, but I would suggest using the more standard:
ErrorDocument 404 /index.php?page=404
Upvotes: 3