RewriteEngine On
RewriteCond %{HTTP_HOST} ^<yourdomain>$ [NC]
RewriteRule ^(.*)$ http://<yourdomain>/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.)/$
RewriteRule ^(.[^/])$ $1/ [L,R=301]

DirectoryIndex index.html
ErrorDocument 404 https://www.<yourdomain>/

301 Moved Permanently

301 redirect is a permanent redirect, which transfers about 90-99% of link juice. This redirect indicates that the page has been moved to a new address and the old URL should be considered out-of-date.

302 Found (HTTP 1.1) / Moved Temporarily (HTTP 1.0)

302 redirect – temporary redirect. This redirect transmits 0% of link juice and, in most cases, should not be used. At the moment, the Internet works under the HTTP protocol, which determines how to manage URLs. In two versions of this protocol, this server reply has a different response status:

  • HTTP 1.0: 302 server response is “Moved Temporarily” – the current document is temporarily moved to a different URL.
  • HTTP 1.1: there was a change in the server’s response to “Found” – the current document was found.

307 Moved Temporarily (HTTP 1.1 Only)

307 redirect in the HTTP 1.1 protocol became the receiver of the 302 redirect. While the main search bots will consider it as an analog-302, for almost all cases, it’s best to use 301. The exception to this rule is when the content moved only temporarily (for example, during tech maintenance) and the search engines already understand, that your server is compatible with HTTP 1.1. However, since it is hard to determine whether the search engines really understood that your server is compatible with this new protocol, it is better to use a 302 redirect for content that was temporarily moved.

Other types of redirects

There are also other kinds of redirects: using Meta Refresh or JavaScript – which are executed at the page level, and not at the server level. Here’s what a typical Meta Refresh redirect looks like:

However, these redirects are desirable to use extremely rare, because they can be used by spammers and doorways. Also, when using these redirects, the link juice is almost not transmitted.

Examples of using are below.

Canonization of a site’s domain or how to stick a domain together?

To glue a domain from www to without www:

RewriteCond %{HTTP_HOST} ^\.com$ [NC]
RewriteRule ^(.*)$ Http://$1 [R=301,L]

For gluing together with without www on www:

RewriteCond %{HTTP_HOST} ^site\.com$ [NC]
RewriteRule ^(.*)$ Http://$1 [R=301,L]

In order to correctly choose on which option to paste, it is advisable to take into account:

  • what options are more in the top
  • what options lead to more pages in the index

Slash canonicalization at the end of the URL

When designing a site it is important to decide on the format using the slash at the end of the URL, since for search engines there are 2 URLs of the form:


are different. Therefore, after you have decided on the site, then you need to prescribe the following redirects

To remove a slash at the end:

RewriteCond %{HTTP_HOST} (.*)
RewriteCond %{REQUEST_URI} /$ [NC]
RewriteRule ^(.*)(/)$ $ 1 [L,R =301]

To add a slash to the end of the address bar:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]

Redirection of one page to another page:

Redirect 301 /oldpage.html

Redirect for the duplicates of the main page

This code ensures that any home page address that includes multiple versions of direct links to the page name, for example, default.htm or index.html, will be redirected to the canonical homepage,

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*(default|index|main)\.(html|php|htm)\ HTTP/ [NC]
RewriteRule ^(([^/]+/)*)(default|main|index)\.(html|php|htm)$$1 [L,R=301]

Redirect directory

If the catalog displayed in the URL structure, then if you do the redirection, you will also have to change the URL accordingly. In this case, you need to write the following redirect:

RewriteRule ^(.*)/old-catalog/(.*)$ $1/new-catalog/$2 [R=301,L]

But, if the URL of the old catalog starts immediately after the domain:, then you need to use the following code

RewriteRule old-catalog /(.*) / old-catalog /$1 [R=301,L]

Redirect when changing file extensions

If you suddenly moved to another platform or CMS and at the same time the URLs extension changed only, then, in this case, you need to use such redirect.

RedirectMatch 301 (.*)\.php$$1.html

Usage examples to protect the site from multiple page duplicates

Redirect from different domains and subdomains

If you bought several domains in different domain zones or developed a new site and attach it on a subdomain, and forgot to close this subdomain from indexing, you must redirect to the primary domain:

RewriteCond %{HTTP_HOST} !^www\.site\.com
RewriteRule ^(.*)$$1 [R=301,L]

Thus, all domains such as,, will be redirected to

How to remove multiple slashes / dashes in a URL

Sometimes “by chance” the URL may include several slashes, for example, Here it is necessary to do 301 redirect per page with one slasher

RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]

Likewise, you can put together several dashes into one in the URL: from at

RewriteCond %{REQUEST_URI} ^(.*)–(.*)$
RewriteRule . %1-%2 [R=301,L]

How to make a redirect from any URL to URL but only in lowercase?

Since, lowercase is taken into account by search engines, when designing a site it is desirable to add all URLs in lowercase. However, if you initially missed this point, it’s best to use the following redirect code at the php script level:

header(“HTTP/1.1 301 Moved Permanently”);
header(“Location: http://” . $_SERVER[‘HTTP_HOST’] . $lowerURI);

How to move to a new domain? The optimal strategy for 301 redirects

The most favorable strategy for moving to a new domain, taking into account the conditions of the two major search engines – Runet Yandex and Google:

  • 301 redirect from the old site to the new one.
  • whereas we do not do a redirect for the robots.txt file, but we assign the Host directive to the new domain.

Then the code for setting up a redirect on the old site can look like this:

RewriteCond %{REQUEST_FILENAME} robots.txt$ [NC]
RewriteRule ^([^/]+) $1 [L]
RewriteCond %{HTTP_HOST} !^www\.site\.com
RewriteRule ^(.*)$$1 [R=301,L]

and the robots.txt file for the old site:

User-agent: Google

Leave a Reply

Your email address will not be published. Required fields are marked *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

The reCAPTCHA verification period has expired. Please reload the page.