Today I’ll show you how to enable the Apache mod_rewrite
module so you can rewrite URLs using .htaccess
files. This is useful for redirecting old content to new, if you change web hosting services, or even a new domain name. I’ll give a few examples too.
Contents
- Prerequisites
- Edit Virtual Hosts
- Enable mod_rewrite and Restart
- Some mod_rewrite Examples
- Conclusion
- See Also
- Further Reading
Prerequisites
- You will need root access or a user with
sudo
privileges
Edit Virtual Hosts
Depending on your set up, the configuration file will be in different location, and possibly a different name. I will give examples of what you’re looking for:
- For an Apache Virtual Hosts default site on port 80:
sudo nano /etc/apache2/sites-available/000-default.conf
- For an Apache Virtual Host default site on port 443:
sudo nano /etc/apache2/sites-available/default-ssl.conf
- For an Apache Virtual Host setup for a domain:
sudo nano /etc/apache2/sites-available/mywebsite.com.conf
At the top of the file, just after <VirtualHost *:80>
or <VirtualHost *:443>
, add the following code:
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Then save ctrl + o, ENTER and exit nano
ctrl + x.
The directive that enables mod_rewrite
to function is AllowOverride All
which by default is set to AllowOverride None
.
Enable mod_rewrite and Restart
Next, we enable to mod_rewrite
module:
sudo a2enmod rewrite
The restart Apache:
sudo systemctl restart apache2
Some mod_rewrite Examples
We place any mod_rewrite
rules inside an .htaccess
file and upload to the folder you want to apply it too (usually the root folder public_html
).
Before we start writing rules, be sure to enclose them inside a <IfModule mod_rewrite.c>
to stop any errors:
<IfModule mod_rewrite.c>
#directives go here
</IfModule>
Let’s redirect an old page to a new page:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^old_page.html$ new_page.html [NC]
</IfModule>
To redirect non-www to www (replace with your domain name):
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^ricmedia.com [NC]
RewriteRule ^(.*)$ https://www.ricmedia.com/$1 [L,R=301]
</IfModule>
To redirect HTTP to HTTPS:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://www.ricmedia.com/$1 [L,R=301]
</IfModule>
Restrict what file types that can be served:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule .*\.(jpg|jpeg|gif|png|bmp|exe|swf)$ - [F,NC]
</IfModule>
Redirect all URI/L requests to a new domain name. To explain, this will redirect https://www.olddomain.com/article555/index.html
to https://www.newdomain.com/article555/index.html
without having to write a rewrite line for each page:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^olddomain.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.olddomain.com$
RewriteRule (.*)$ https://www.newdomain.com/$1 [R=301,L]
</IfModule>
Conclusion
I hope you’ve enjoyed this article and learned some handy mod_rewrite
rules. If you ran into any trouble, make a comment or contact me.
See Also
- Redirect non-www to www & http to https using mod_rewrite .htaccess
- The Ultimate Web Server on Ubuntu 22.04
Comments
There are currently no comments on this article.
Comment