Redirects on a Website
These redirects assume an Apache server and work in the .htaccess file. It is placed at the root of the site and can be overridden in sub-directories. PHP commands may be used too.
Redirect vs. URL-rewriting
We must distinguish the principle of redirect to that of URL-rewriting. The two techniques are similar but have an opposite effect:
Redirect: The URL given by the user is redirected to a new page. The URL of the new page is displayed by the browser.
It is used for a change of address. The new URL should be indexed by search engines and the older removed.
URL-rewriting: The URL given by the user is invisibly replaced by the server by a new path. However, the browser displays the URL given by the user.
It is used to separate the visible URL of the actual path and to provide users more convenient labels. Only the visible URL must be indexed by search engines and not the path on the server.
Apache uses the same RewriteEngine module in both cases, but the Redirect command or 301 option change the URL displayed. In fact, the server sends the new URL to the browser that must make a new request.
Redirects should be placed before rewritings in .htaccess.
How to add www
How to redirect http://example.com to http://www.example.com
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com
RewriteRule (.*) http ://www.example.com/$1 [R=301,L]
HTTP_HOST represents the domain so the condition extracts the domain from the URL and compare it with a string that starts by example.com.
And we do a 301 redirect by replacing example.com with http://www.example.com for all URLs that match the condition.
How to redirect 404 errors on one page
This may be an error page, called page 404 that is the code returned when a page is not found, or the home page (most useful).
RewriteEngine on
ErrorDocument 404 /index.php
Note that the directive "RewriteEngine on" that activates the redirects is put once at the beginning of the .htaccess file.
Redirect a domain name to another
To change definitively the domain, the new domain beeing for example example.com. With .htaccess (on the Apache server)
RewriteEngine on
Redirect 301 / http://www.example.com/
All pages will be redirected to new files with the same name but with a different domain.
For a temporary change you would use the code 302 instead.
To redirect a domain name on a site with PHP, you can use the following code in the index.php file:
<?php
header("Status: 301 Moved Permanently");
header("Location:http://www.example.com/");
?>
For the visitor it is as if he had typed the URL of the destination site.
For a temporary change, it is simple as ot is the default, so it is not required to set a status:
<?php header("Location:http://www.example.com/"); ?>
How to redirect the home page to the name of the site
We would like the URL as http://www.example.com/index.html be redirected by the server to http://www.example.com/ to prevent robots from search engines do see two different URLs where there is only one.
In this case, we will use the PHP environment variable REQUEST_URI which indicates which page has been requested to the server. Then we use a load command, as in the following example:
<?php
if(eregi('index.(html|php)', $_SERVER['REQUEST_URI']))
{
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://www.example.com/');
}
?>
We checked with the function eregi that the loaded page is index.php or index.html (or any other name) and only in such cases is made the redirection.
Another option in .htaccess is to rename the home page, home.html for example, and define it as home page with the following command:
DirectoryIndex home.html
Redirect on a moved page
A page has been moved to a new directory, or under a new name (or both), this directive must be given to the server:
Redirect 301 /directory/page.html http://www.example.com/directory/page.html
Whether on the same site or on another, the site name is always included in the destination URL, and not in the source.
Redirecting a whole directory to a single file
If you want to remove a sub-directory from the Web, this can be achieved with a single command.
RedirectMatch 301 ^/mysubdir/.*$ http://www.example.com/index.php
The directory to remove is called "mysybdir" and the target is the index of another directory or a page.
The target must not be included in the directory to redirect because that will let enter an infinite loop.
In terms of SEO, such an operation is disadvantageous. It is better to place a page in "noindex" rather than redirect to another page when the content is different.
It you want a redirect, as always, you must ensure that all links pointing to a redirected page are updated. A link to a redirect page on the same site let it penalized.
Use the link checker with options -r -s -f to find these links.
Reference: The Apache Manual.