Loading...

Knowledge Base
Switch to Bluehost and get money back
Migrate your WordPress website from your current host and we'll cover the costs.

How to Redirect a URL Using an .htaccess File

URL redirects are essential for SEO because they forward the authority of a link to a new page and prevent 404 errors. You can edit your .htaccess file on your Apache server to redirect a URL to another URL. To permanently redirect one URL to another, you can create an HTTP status code using a .htaccess file. This is known as a 301 redirect.

By default, your website can be accessed with both www.example.com and example.com. Since Google penalizes this for duplicated content, you should restrict access to either www.example.com or example.com. Some links may be outside your website scope, and the search engines may have already indexed your website under both addresses.

Note: Your primary .htaccess file is located in your public_html folder. To see how to access this file, please see our htaccess Tutorial.



How to Redirect a Website Using .htaccess

Below you will find a step-by-step instructions on how to redirect a website using .htaccess. You can get more information about WordPress URL redirects by visiting our blog.

How to Edit the .htaccess File for Redirection

Redirecting to or from www

Create a 301 redirect forcing all http requests to use either www.example.com or example.com:

  • Example 1 - Redirect example.com to www.example.com:
    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^www.example.com$ [NC]
    RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
  • Example 2 - Redirect www.example.com to example.com:
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^www\.example\.com$
    RewriteRule ^/?$ "http\:\/\/example\.com\/" [R=301,L]
    

Explanation of the .htaccess 301 redirect

Let's have a look at Example 1 - Redirect example.com to www.example.com.

  • The first line tells Apache to start the URL rewrite module.
    RewriteEngine On
    
  • The next line specifies that the next rule only fires when the http host (that means the domain of the queried url) is not (- specified with the "!") www.example.com.
    RewriteCond %{HTTP_HOST} !^www.example.com$ [NC]
    
    The $ means that the host ends with www.example.com - and the result is that all pages from www.example.com will trigger the following rewrite rule. Combined with the inversive "!" is the result, every host that is not www.example.com will be redirected to this domain.

    The [NC] specifies that the HTTP host is case insensitive. The escapes the "." - because this is a special character (normally, the dot (.) means that one character is unspecified).
  • The final line describes the action that should be executed: The ^(.*)$ is a little magic trick. Can you remember the meaning of the dot? If not, this can be any character(but only one). So .* means that you can have a lot of characters, not only one. This is what we need because ^(.*)$ contains the requested URL without the domain.
    RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
    The next part http://www.example.com/$1, describes the target of the rewrite rule. This is our "final" used domain name, where $1 contains the content of the (.*).

    The next part is also important since it does the 301 redirects for us automatically: [L, R=301]. L means this is the last rule in this run. After this URL rewrite, the webserver will return a result. The R=301 means that the web server returns a 301 moved permanently to the requesting browser or search engine.

Redirecting to example.com/index.php

You have a website with the name example.com, and you want to redirect all incoming URLs that are going to example.com/ to example.com/index.php. Use the code below.

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule ^$ http://example.com/index.php [L,R=301]

Explanation of the .htaccess 301 redirect

What does the code above do?

  • The first line tells Apache to start the URL rewrite module.
    RewriteEngine On
    
  • The next line specifies that the next rule only fires when the http host (that means the domain of the queried url) is not www.example.com.
    RewriteCond %{HTTP_HOST} ^www.example.com$
    
    The $ means that the host ends with www.example.com - and the result is that all pages from www.example.com will trigger the following rewrite rule.
  • The final line describes the action that should be executed:
    RewriteRule ^$ http://www.example.com/index.php [L,R=301]
    The next part http://www.example.com/index.php, describes the target of the rewrite rule.

    The next part is also important since it does the 301 redirects for us automatically: [L, R=301]. L means this is the last rule in this run. After this URL rewrite, the webserver will return a result. The R=301 means that the web server returns a 301 moved permanently to the requesting browser or search engine.

How to Redirect Visitors to a New Site

You have an old website accessible under oldexample.com, and you have a new website accessible under newexample.com. Copying the old website's content to the new website is the first step - but what comes after that? You should do a 301 moved permanently redirect from the old URL to the new URL - which is easy and has some advantages:

  • Users will automatically be redirected to the new domain - you do not have to inform them.
  • Search engines will be redirected to the new domain, and all related information will be moved to the new domain (but this might take some time).
  • Google's PageRank â„¢ will be transferred to the new domain, as well as other internal information that is being used to set the position of pages in the search engine result pages (serp's) - like TrustRank.

Create a 301 redirect for all http requests that are going to the old domain

  • Example 1 - Redirect from oldexample.com to www.newexample.com:
    RewriteEngine On
    RewriteCond %{HTTP_HOST} !oldexample.com$ [NC]
    RewriteRule ^(.*)$ http://www.newexample.com/$1 [L,R=301]
    
    This is useful when you use www.newexample.com as your new domain name (see also this article about redirecting www and non-www domains). If not - use the code of example 2.
  • Example 2 - Redirect from oldexample.com to newexample.com:
    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP_HOST} !oldexample.com$ [NC]
    RewriteRule ^(.*)$ http://newexample.com/$1 [L,R=301]
    

How to Add a Trailing Slash

Some search engines remove the trailing slash from URLs that look like directories - e.g., Yahoo does it. However, it could result in duplicated content problems when the same page content is accessible under different URLs. Apache gives some more information in the Apache Server FAQ.

Let's have a look at an example: example.com/google/ is indexed in Yahoo as example.com/google - which would result in two URLs with the same content.

The solution is to create a .htaccess rewrite rule that adds the trailing slashes to these URLs. Example - redirect all URLs that do not have a trailing slash to URLs with a trailing slash:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !example.php
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://example.com/$1/ [L,R=301]

Explanation of the add trailing slash .htaccess rewrite rule

  • The first line tells Apache that this is code for the rewrite engine of the mod_rewrite module of Apache.
    RewriteEngine On
    
  • The 2nd line sets the current directory as the page root. But the interesting part is that the code makes sure that existing files will not get a slash added. You shouldn't do the same with directories since this would exclude the rewrite behavior for existing directories.
    RewriteCond %{REQUEST_FILENAME} !-f 
  • The line below excludes a sample URL that should not be rewritten. This is just an example. If you do not have a file or URL that should not be rewritten, remove this line.
    RewriteCond %{REQUEST_URI} !example.php
    
  • The condition below finally fires when a URL does not contain a trailing slash.
    RewriteCond %{REQUEST_URI} !(.*)/$
    
  • Now, we need to redirect the URLs without the trailing slash. The code does the 301 redirect to the URL, with the trailing slash appended. You should replace example.com with your domain.
    RewriteRule ^(.*)$ http://example.com/$1/ [L,R=301]
    

Summary

You don't have to be tech-savvy to perform a URL redirect. There are various methods available that you can use based on your preference. If you own a WordPress website and don't want to modify your .htaccess file, you can utilize a redirect plugin that make the process easier for you.

If you need further assistance, feel free to contact us via Chat or Phone:

  • Chat Support - While on our website, you should see a CHAT bubble in the bottom right-hand corner of the page. Click anywhere on the bubble to begin a chat session.
  • Phone Support -
    • US: 888-401-4678
    • International: +1 801-765-9400

You may also refer to our Knowledge Base articles to help answer common questions and guide you through various setup, configuration, and troubleshooting steps.

Did you find this article helpful?

 
* Your feedback is too short

Loading...