How to Set Up mod_rewrite on Apache
The mod_rewrite
module in Apache provides a powerful and flexible way to rewrite URLs. This guide will walk you through enabling and configuring mod_rewrite
on Apache.
1. Enable mod_rewrite
First, you need to ensure that mod_rewrite
is enabled in your Apache configuration.
For Ubuntu/Debian-based systems:
sudo a2enmod rewrite
For CentOS/RHEL-based systems, mod_rewrite
is usually enabled by default. If not, ensure that the following line is included in your httpd.conf
or a relevant configuration file:
LoadModule rewrite_module modules/mod_rewrite.so
2. Configure Apache to Allow Overrides
Update your Apache configuration to allow URL rewriting. Edit your Apache configuration file or virtual host file (e.g., /etc/apache2/sites-available/000-default.conf
for Ubuntu/Debian or /etc/httpd/conf/httpd.conf
for CentOS/RHEL):
sudo nano /etc/apache2/sites-available/000-default.conf
Ensure that the AllowOverride
directive is set to All
within the <Directory>
block:
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
Save and close the file (press Ctrl+X, then Y, and Enter).
3. Create a .htaccess File
Create a .htaccess
file in your web root directory if it doesn’t already exist:
nano /var/www/html/.htaccess
Add your rewrite rules to this file. For example, to redirect all HTTP requests to HTTPS, you could use:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Save and close the file.
4. Test Your Configuration
Restart Apache to apply the changes:
sudo service apache2 restart
For CentOS/RHEL systems, use:
sudo service httpd restart
Verify that your rewrite rules are working by accessing your site and checking if the URLs are being rewritten as expected.
5. Troubleshooting
If you encounter issues, check the Apache error logs for hints:
sudo tail -f /var/log/apache2/error.log
For CentOS/RHEL systems, use:
sudo tail -f /var/log/httpd/error_log
Ensure that the AllowOverride
directive is correctly set and that the rewrite rules are correctly written in your .htaccess
file.
6. Advanced Configuration
For more advanced URL rewriting, refer to the official Apache mod_rewrite documentation.