Important notes about htaccess redirection
- Always be sure to upload .htaccess files in ascii mode, sending it up as
binary will break it (and usually make your server very, very unhappy.)
- .htaccess does not work if you're on a windows server.
- Make sure you triple check your changes. Clear your cache and look, test
the server headers to make sure you see a 301 (that means its permanent) not a
302 (temporary) unless you are absolutely sure you really mean temporary.
- Since some operating systems don't allow you to make a file without
something before the "." you may need to save it as something.htaccess, some
may even have to save it as htaccess.txt and change it once you've uploaded
it.
- Make sure your ftp program will show .htaccess files (FileZilla
does and is free) It is a bit hard to edit something you can't see ;)
- Double check that you're not overwriting an old one (some servers already
place one there for your custom 404 pages etc.)
- Make sure you replace example.com with your own sites URL ;-)
Method 1 -
301 Redirect Examples
To Move a single page
Quick, easy and seamless for your visitors.
Redirect 301 /oldpage.html http://www.example.com/newpage.html
To Move an entire site
This will catch any traffic on your old site and redirect it to your index
page on your new server. If you want to redirect each page to its new spot, this
isn't the one for you.
Redirect 301 / http://www.example.com/
Changed file extension?
This example is perfect if you've decided to switch to .php from .html pages.
It will look for any .html page and redirect it to .php (ie http://www.example.com/yourpage.html
and redirect it to http://www.example.com/yourpage.php). Now, be careful with
this, it does mean any html page. I did this on one of my sites and had
totally forgotten I had an iframe with .html content on some pages... I didn't
notice for weeks that it was broken :S.
So learn from my mistake ;-) check, double check, then check again.
RedirectMatch 301 (.*)\.html$ http://www.example.com$1.php
Redirect www to non www version of site
It's best to stick with either always using www.example.com or just
example.com. Allowing both can confuse the search engines. So here's how to
force your site to always show the non-www version. (Search for "canonical url
errors" in your favorite search engine for more info.)
Note: If you do use either of the next 2 codes below, and
use a secure server (ie. https:) be sure to check that it doesn't
redirect the secure to the insecure version. I'm pretty sure this will do that
and that isn't something you want!
Redirect non-www to www
Same as above except in the reverse, this one forces the www. into your url.
Redirect example.com/index.php to example.com/
Another snippet that I've heard is a good idea to make sure search engines
don't give you a duplicate content penalty, this will also redirect example.com/folder/index.php
to example.com/folder/.
I might add more later as I need them, for now those are the one's I use on a
few different sites I run. Remember, I can't stress enough to test, test and
re-test anything you do to your .htaccess file.
Method 2 - Meta Redirect
I'd really advise against redirecting this way! Most search engine are having
difficulties with this one (and spammers have been using this in very bad ways)
and it might get your page in a heap of trouble! Some browsers also don't read
it properly so your would-be visitors may get stranded. Seriously, it really
isn't advisable to use this anymore but if you insist on trying it, here it is.
<meta http-equiv="refresh" content="10; url=http://example.com/">
Content="10; tells the browser to wait 10 seconds before transfer, choose
however long you would like, you can even choose 0 to give a smoother
transition.
Final Notes
I can't stress enough how important it is to test your server's response
headers any time you make a change to your .htaccess file! If you use Firefox
the LiveHTTPHeaders extensions
is the best I've ever found.
That will tell if you're sending a 301 (permanent
redirect), 302 (temporary redirect, not what you want probably!) or 200 which
means page found, as well as a ton of other info.