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
- How to Edit the .htaccess File for Redirection
- How to Redirect Visitors to a New Site
- How to Add a Trailing Slash
- Summary
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 [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 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 final line describes the action that should be executed:
RewriteRule ^$ http://www.example.com/index.php [L,R=301]
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]
- 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.