Search code examples
php.htaccesshttp-redirecthttp-status-code-302

301 or 302 Redirection With PHP


I'm considering using the following code during a website launch phase to show users a down for maintenance page while showing me the rest of the site.

Is there a way to show the correct 302 re-direction status to search engines or should I look for another .htaccess based approach?

$visitor = $_SERVER['REMOTE_ADDR'];
if (preg_match("/192.168.0.1/",$visitor)) {
    header('Location: http://www.yoursite.com/thank-you.html');
} else {
    header('Location: http://www.yoursite.com/home-page.html');
};

Solution

  • For a 302 Found, i.e. a temporary redirect do:

    header('Location: http://www.example.com/home-page.html');
    // OR: header('Location: http://www.example.com/home-page.html', true, 302);
    exit;
    

    If you need a permanent redirect, aka: 301 Moved Permanently, do:

    header('Location: http://www.example.com/home-page.html', true, 301);
    exit;
    

    For more info check the PHP manual for the header function Doc. Also, don't forget to call exit; when using header('Location: ');

    But, considering you are doing a temporary maintenance (you don't want that search engines index your page) it's advised to return a 503 Service Unavailable with a custom message (i.e. you don't need any redirect):

    <?php
    header("HTTP/1.1 503 Service Unavailable");
    header("Status: 503 Service Unavailable");
    header("Retry-After: 3600");
    ?><!DOCTYPE html>
    <html>
    <head>
    <title>Temporarily Unavailable</title>
    <meta name="robots" content="none" />
    </head>
    <body>
       Your message here.
    </body>
    </html>