Ultimate htaccess Redirects List

Print Page

A list of useful htaccess redirects that you can easily implement on your site.

Redirect removed pages
Redirect deleted pages back to your site’s home page, or anywhere you want.

RedirectMatch 301 /page1/?$ http://mydomain.com/
RedirectMatch 301 /page2/?$ http://mydomain.com/

If all pages share a common pattern, we can rewrite this in single-line format:

RedirectMatch 301 /(page1|page2)/?$ http://mydomain.com/

Redirecting removed pages back to your home page preserves page rank that they may have accumulated, but if you rather like search engines or any other resources liking to the pages to forget about it, use the next redirect.

Declare page dead
By using the following redirect, you are sending a 410 status. Which means that the resources is permanently gone.

RedirectMatch gone /page1
RedirectMatch gone /page2

As before, we can optimize the code by writing this in a single line:

RedirectMatch gone /(page1|page2)

Note that here we are not using /?$ characters. So this will match any URL that begins with /page1, such as:
/page1-1
/page1-is-awesome

Redirect a static page to another site

Redirect 301 /old/old.html http://www.mynewdomain.com/new.html

Redirect a dynamic page to another site
A dynamic page is one generated by a database driven application. Such pages have a file name appended by a query string, looking something like this:

For this, the 301 redirect used for static pages will not work. For the above example, you’ll need to add this in your htaccess file:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^id=61$
RewriteRule ^/page.php$ http://www.mynewdomain.com/new.html? [R=301,L]

Redirect a dynamic URL to a new single file
Redirect request to dynamic URL’s to a single file
static file:

RewriteRule ^page.php?id=(.*)$ /new.html [R=301,L]

Here, a request to a dynamic URL such as
will be redirected to

Redirect file names with spaces
If you have a file with a space in its name, for example “old page.html”, a standard redirect 301 line won’t work, To redirect such files, include the file name in double quotes.

Redirect 301 "/old page.html"  

Redirect an entire category to another site

RedirectMatch 301 ^/category/awesomestuffs/?(.*)$ http://mynewdomain.com/category/awesomestuffs/$1

Redirect an entire directory to another site

Redirect 301 /olddirectory http://mynewdomain.com/newdirectory/

Redirect an old domain to new domain

Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://www.mynewdomain.com/$1 [R=301,L]

OR

Redirect 301 / http://www.mynewdomain.com/

Redirect all files in a folder to one File
Lets say you are no longer running ‘Christmas Giveaway’ and hence want to redirect all requests to the folder /awesomegiveaway to a single page called /end-of-giveaway.php. This redirect can be accomplished by the following:

RewriteRule ^awesomegiveaway(.*)$ /end-of-giveaway.php [R=301,L]

Redirect all files in a folder to one file, except one
In the above example, if you want one file to redirect to some other location, then that can be accomplished like this:

RewriteRule ^awesomegiveaway/special.html /special-offer.html [R=301,L]
RewriteRule ^awesomegiveaway(.*)$ /end-of-giveaway.php [R=301,L]

Once implemented, all files from /awesomegiveaway/ directory will redirect to the /end-of-giveaway.php file, except /awesomegiveaway/special.html which will redirect to /special-offer.html

Redirect visitors to a temporary Page
While you do some maintenance work on your site, you can redirect your visitors to a notice page and tell them the reason of downtime of your site.

Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !/ notice.html$
RewriteRule .* /maintenance.html [R=307,L]

Redirect to new file extension
This will redirect requests for any .html page to .php (ie is redirected to .

RedirectMatch 301 (.*)\.html$ http://www.mydomain.com$1.php

Redirect non-www to www domain
This will redirect all non-www requests to your site to the www version:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

Redirect www to non-www domain
This does the opposite of the above. The following code wil redirect all www requests to your site to the non-www version.

RewriteEngine On
RewriteCond %{HTTP_HOST} !^my-domain\.com$ [NC]
RewriteRule ^(.*)$ http://my-domain.com/$1 [R=301,L]

For more htacces hacks, check out this post.