Rewrite or Redirect URL with Apache

Nov 23, 2020 apache misc-web
This post is more than 18 months old. Since technology changes too rapidly, this content may be out of date (but that's not always the case). Please remember to verify any technical or programming information with the current release.

This is an article that originally appeared on RedirectURL, a site I built a while ago. Find out the history of that site here

Apache’s mod_rewrite module can create redirects with the proper configuration. Let’s dig in.

Verifying Mod Rewrite is Enabled

You’ll want to verify that you have mod_rewrite enabled. Depending on your operating system and Apache version, you can try one of these commands:

  • httpd -M
  • apachectl -M
  • apache2ctl -M

After running any of these commands successfully, you’ll should see mod_rewrite in the list. If you do not, you may not have it enabled.

Since there are multiple installs and configurations of Apache, there are multiple ways to enable mod_rewrite.

For some installs, it’s as easy as running the following command:

sudo a2enmod rewrite

Notice that you must prefix this command with sudo as this process requires you to act as a root user.

If your configuration doesn’t have a2enmod available, you have to verify and enable Mod Rewrite manually.

To do this, modify your httpd.conf file. Depending on your operating system, this might be located in one of many places:

  • /etc/apache2/httpd.conf
  • /etc/apache2/apache2.conf
  • /etc/httpd/httpd.conf
  • /etc/httpd/conf/httpd.conf

Once you’ve found the file on your filesystem, you can edit it to enable mod_rewrite.

Find the line that begins like this:

#LoadModule rewrite_module ...

And remove the #. Then, restart your version of Apache. The same command you may have used above to list modules can be used to restart Apache. For example, you might run:

sudo apachectl restart

You’ll notice that this command required sudo in front of it. That’s because restarting Apache requires you to be acting as the root user.

Configuring the Server Redirect

Since Apache is so flexible, there are a number of ways to configure redirects with mod_rewrite. For this example, we’re going to modify the server’s http configuration file. Another popular way to do this is to apply the redirect to the .htaccess file.

Decide What Your Redirect Will Be

For this example, we’re going to stick with a very common scenario that’s very simple.

We want to redirect to with a permanent 301 HTTP code.

Writing the Rule and Placing it Properly

So, now it’s time to open up the http configuration file (you may have had to access it above). There may be multiple <Directory> declarations. Find the one that has a value pointing to your web files. Basically, this should be the one that matches the DocumentRoot declaration you’ll find somewhere else in the file. It probably will have something like www or in our case in it somewhere.

Inside of the <Directory> declaration, you can write the following:

RewriteEngine on
RewriteBase /
RewriteRule (.*) [R=301,L]

Now, you’ll need to restart your Apache server using one of the methods we covered above. You should be all set!

Go to All Posts