Enable mod_rewrite on Apache

Posted
Comments 0

Learn how to enable the mod_rewrite module on Apache web server.

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

  • 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

Further Reading

Author
Categories Apache

Comments

There are currently no comments on this article.

Comment

Enter your comment below. Fields marked * are required. You must preview your comment before submitting it.