FREE THOUGHT · FREE SOFTWARE · FREE WORLD

Home  »  Htaccess  »  301 Redirect Cheatsheet

by 17 comments

I got tired of always having to search google to remember the syntax for issuing seo friendly (300, 301, 302, 303, 305, 306, 307) Redirects using multiple programming languages and methods... so I made my own list!

Redirection Methods

Am I missing something? Most definately! Please use the comment form below to suggest new code.

Redirect with meta http-equiv tags

These go in the <head> </head> section of your html. Usually when you use this meta redirect method you should also use the javascript method, just to be safe.

Refresh meta http-equiv tag

Redirects to http://www.askapache.com after 0 seconds.

<meta http-equiv="refresh" content="0;url=http://www.askapache.com" />

Redirect with javascript

These go in the <head> </head> section of your html.

Basic javascript Redirect method

Will redirect user to http://www.askapache.com immediately

<script type="text/javascript">
window.location.href='http://www.askapache.com';
</script>

Redirect after specific time period

This will redirect to http://www.askapache.com after 2 seconds

<body onload="javascript:setTimeout(function(){window.location.href='http://www.askapache.com'},2000);">

Redirect with PHP

Using "Location" header

<?php
header('Location:http://www.askapache.com');
exit;
exit();
?>

Using "Refresh" header

<?php
header('Refresh: 0; URL=http://www.askapache.com');
exit;
exit();
?>

Ultimate PHP method

It redirects to a page specified by "$url". $mode can be:

  • LOCATION: Redirect via Header "Location"
  • REFRESH: Redirect via Header "Refresh"
  • META: Redirect via HTML META tag
  • JS: Redirect via JavaScript command
<?php
function do_redirect($url,$mode)
{
    if (strncmp('http:',$url,5) && strncmp('https:',$url,6)) {
        $starturl = ($_SERVER["HTTPS"] == 'on' ? 'https' : 'http') . '://'.
        (empty($_SERVER['HTTP_HOST'])? $_SERVER['SERVER_NAME'] : $_SERVER['HTTP_HOST']);
        if ($url[0] != '/') $starturl .= dirname($_SERVER['PHP_SELF']).'/';
        $url = "$starturl$url";
    }
    switch($mode) {
        case 'LOCATION':
        header("Location: $url");
        exit;
        case 'REFRESH':
        header("Refresh: 0; URL="$url"");
        exit;
        case 'META':
        exit;
        default:
        ?><script type="text/javascript">
        window.location.href='<?=$url?>';
        </script><?
    }
    exit;
}
?>

Redirect with Perl

Simple 302 Redirect with perl

#!/usr/bin/perl
my $URL = "http://www.askapache.com";
print "Status: 302 MovednLocation: $URLnn";

Simpler 302 Redirect with perl

#!/usr/bin/perl
print "Location: http://www.askapache.comnn";
exit;

Redirect with ColdFusion (CFM)

Using cheader for 301 "permanent" redirect

<cfheader statuscode="301" statustext="Moved Permanently">
<cfheader name="Location" value="http://www.askapache.com">
<cfabort>

Using clflocation for 302 "temporary" redirect

<cflocation url="http://www.askapache.com">

Redirect with ASP (VB Script)

301 Redirect

<%@ Language=VBScript %>
<%
response.status="301 moved permanently"
Response.AddHeader "Location", "http://www.askapache.com"
%>

Redirect with shell script

302 Redirect with sh shell script

#!/bin/sh
echo "Content-type: text/html"
echo "Location: http://www.askapache.com";
echo "";
exit 0;

Redirect with mod_rewrite in apache htaccess

See also Ultimate Apache htaccess article and URL Redirection

301 Redirect

Redirects permanently when a request is made to site.com/thisword.html to http://www.askapache.com

RewriteEngine On
RewriteBase /
RewriteRule ^thisword.html$ http://www.askapache.com [R=301,NC,L]

302 Redirect

Redirects temporarily when a request is made to site.com/thisword.html to http://www.askapache.com

RewriteEngine On
RewriteBase /
RewriteRule ^thisword.html$ http://www.askapache.com [R,NC,L]

Redirect with mod_alias in apache htaccess

301 Redirect

Redirect 301 /thisword.html http://www.askapache.com

or with RedirectPerm

RedirectPerm /thisword.html http://www.askapache.com

or with RedirectMatch

RedirectMatch 301 ^thisword.html$ http://www.askapache.com

302 Redirect

Redirect 302 /thisword.html http://www.askapache.com

or with RedirectTemp

RedirectTemp /thisword.html http://www.askapache.com

or with RedirectMatch

RedirectMatch 302 ^thisword.html$ http://www.askapache.com

Redirect with ErrorDocument in apache htaccess

302 Redirect

Issues a 302 Redirect to http://www.askapache.com when a file is not found. See also Force Apache to output any HTTP Status Code with ErrorDocument

ErrorDocument 404 http://www.askapache.com

Redirect with Python / Django

Thanks to thebjorn for contributing this first one, which issues a 302 Redirect.

from django import http
def view(request):
return http.HttpResponseRedirect('http://www.askapache.com/')

This example was contributed by John and shows how to issue a proper 301 Redirect, additional info on this below the example.

from django import http
def view(request):
return http.HttpResponsePermanentRedirect ('http://www.askapache.com/')

Django includes a number of HttpResponse subclasses that handle different types of HTTP responses. Like HttpResponse, these subclasses live in django.http.

HttpResponseRedirect
The constructor takes a single argument -- the path to redirect to. This can be a fully qualified URL (e.g. 'http://www.askapache.com/htaccess/') or an absolute URL with no domain (e.g. '/htaccess/'). Note that this returns an HTTP status code 302.
HttpResponsePermanentRedirect
Like HttpResponseRedirect, but it returns a permanent redirect (HTTP status code 301) instead of a "found" redirect (status code 302).
HttpResponseNotModified
The constructor doesn't take any arguments. Use this to designate that a page hasn't been modified since the user's last request (status code 304).

Tags

November 29th, 2007

Comments Welcome

  • http://www.netmagellan.com/ Ash Nallawalla

    Thanks for this fantastic checklist! I will send my students to this page.

  • http://www.askapache.com/ AskApache

    @ Ash

    Thanks! I will have to go through and clean up the code, especially adding code to do 307 Temporary Redirects, which should almost always be used instead of a 302 Redirect.

  • http://blog.tkbe.org thebjorn

    Thanks for the list! saved me a bunch of time. If you'd like to add the code for Django/Python it is:

    from django import http
    def view(request):
    return http.HttpResponseRedirect('http://www.htaccesselite.com')

  • nBridges Media

    Thanks for such nice list

  • David Simmons

    Excellent collection! Thx

  • http://www.homelandvigil.com Natasha

    This is great information. Thanks a bunch

  • Luis

    Which would be the preferred redirect method: PHP or Mod Rewrite ? Why?
    I'm just curious abut it.

  • Mara Alexander

    The links under the "Redirect Method" section appear to have been meant to be anchor links, yet they all redirect to your main page (askapache.com). I'm thinking the anchor tags on the page weren't done correctly.

  • http://www.askapache.com/ AskApache

    @Luis

    Apache loads every time anyway@... so using it

  • http://breadfromscratch.com John

    Heya - the Python example actually would prompt a 302 redirect

    In order to prompt a 301, note that you would need to utilize the HttpResponsePermanentRedirect class a la:

    from django import http
    def view(request):
    return http.HttpResponsePermanentRedirect ('http://www.askapache.com')

    Reference: httpresponse-subclasses

  • http://www.threedames.com OneDame

    Hey, thanks for this list. It really helped me out!

  • http://www.alexandalexa.com/ Stefanos

    Great post! I found it really useful. Any idea if the header redirect is seo fiendly. Aa far as I know the best one is the .htaccess one. Any advice on this issue.

  • Big B.

    Script "Ultimate PHP method" reported Parse error: syntax error, unexpected $end

  • Abraham NooB

    Hi,

    If I want to redirect all pages from my old website to the home page of my new website, would this be enough:

    RedirectMatch 301 (.*) http://www.newdomain.com/
  • http://www.nicecarvings.com Jason

    Do you know how to successfully do this on an smf forum? I'm not able to sign in when using this method.

  • Pingback: SEO: Οδηγός αρχαρίων και βέλτιστες πρακτικές | CREATIVE IDEAS

  • Pingback: SEO: Οδηγός αρχαρίων και βέλτιστες πρακτικές - e-tour

Popular Articles
My Online Tools

Related Articles
Newest Posts
Twitter


  •  t.co/ShKrGdqXuJ 
  • RUN GCC! This is a typical shirt I wear, from the  t.co/46LYbFr4k2  shop. A clerk at the LQ recognized it!  t.co/jjmT0dkCPu 
  • Merlin the Magician  t.co/iMmRbanUi4 
  • ROGUE CODE - Latest novel from @markrussinovich  t.co/apkn0LoPIt 
  • RTFM - surprisingly very helpful and way more comprehensive than it looks! @redteamfieldman #pwnAllTheThings  t.co/xiaJ5g0aC9 
  • Dear Hacker - Letters to the Editor of 2600, from Emmanuel Goldstein  t.co/JCfLab7FAJ 
  • The Mythical Man-Month - Essays on Software Engineering, by Frederick P. Brooks, Jr.  t.co/ilWN5GHElr 
  • "where wizards stay up late" - The Origins of the Internet. Favorite book detailing the birth of the net and IMPs  t.co/gY9VTGJgZz 
  • ZERO DAY - read before Trojan horse  t.co/pPMLGDJv8P 
  • Trojan Horse, a novel!  t.co/Hf8EtYaZVa 
  • The Hacker Playbook - very nice high level overview of attacks  t.co/lHwNVWi61u 
  • Clean Code - A Handbook of Agile Software Craftsmanship  t.co/hnJX0x1qIc 
  • Secrets of the JavaScript Ninja - By my absolute favorite JS hacker John Resig!  t.co/tZ42ljmcCl 
  • Hacking Exposed 7: Network Security Secrets & SolutionsMy all time favorite, basic but thorough and accurate.  t.co/jycW0RDVtZ 

Hacking and Hackers

The use of "hacker" to mean "security breaker" is a confusion on the part of the mass media. We hackers refuse to recognize that meaning, and continue using the word to mean someone who loves to program, someone who enjoys playful cleverness, or the combination of the two. See my article, On Hacking.
-- Richard M. Stallman






[hide]

It's very simple - you read the protocol and write the code. -Bill Joy

Except where otherwise noted, content on this site is licensed under a Creative Commons Attribution 3.0 License, just credit with a link.
This site is not supported or endorsed by The Apache Software Foundation (ASF). All software and documentation produced by The ASF is licensed. "Apache" is a trademark of The ASF. NCSA HTTPd.
UNIX ® is a registered Trademark of The Open Group. POSIX ® is a registered Trademark of The IEEE.

| Google+ | askapache

Site Map | Contact Webmaster | License and Disclaimer | Terms of Service

↑ TOPMain