301 or 302 Redirection With PHP

后端 未结 6 1271
长情又很酷
长情又很酷 2020-12-07 20:04

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

相关标签:
6条回答
  • 2020-12-07 20:24

    The following code will issue a 301 redirect.

    header('Location: http://www.example.com/', true, 301);
    exit;
    
    0 讨论(0)
  • 2020-12-07 20:24

    From the PHP documentation:

    The second special case is the "Location:" header. Not only does it send this header back to the browser, but it also returns a REDIRECT (302) status code to the browser unless the 201 or a 3xx status code has already been set.

    so you are already doing the right thing.

    0 讨论(0)
  • 2020-12-07 20:25

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

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

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

    header('Location: http://www.yoursite.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>
    
    0 讨论(0)
  • 2020-12-07 20:28

    save this file in the same directory as .htaccess

    RewriteEngine on
    RewriteBase / 
    
    # To show 404 page 
    ErrorDocument 404 /404.html
    
    # Permanent redirect
    Redirect 301 /util/old.html /util/new.php
    
    # Temporary redirect
    Redirect 302 /util/old.html /util/new.php
    
    0 讨论(0)
  • 2020-12-07 20:32

    Did you check what header you're getting? Because you should be getting a 302 with above.

    From the manual: http://php.net/manual/en/function.header.php

    The second special case is the "Location:" header. Not only does it send this header back to the browser, but it also returns a REDIRECT (302) status code to the browser unless the 201 or a 3xx status code has already been set.

    <?php
    header("Location: http://www.example.com/"); /* Redirect browser */
    
    /* Make sure that code below does not get executed when we redirect. */
    exit;
    ?>
    
    0 讨论(0)
  • 2020-12-07 20:45

    I don't think it really matters how you do it, from PHP or htaccess. Both will accomplish the same thing.

    The one thing I want to point out is whether you want the search engines begin to index your site in this "maintenance" phase or not. If not, you could use the status code 503 ("temporarily down"). Here's a htaccess example:

    RewriteEngine on
    RewriteCond %{ENV:REDIRECT_STATUS} !=503
    RewriteCond %{REMOTE_HOST} ^192\.168\.0\.1
    ErrorDocument 503 /redirect-folder/index.html
    RewriteRule !^s/redirect-folder$ /redirect-folder [L,R=503]
    

    In PHP:

    header('Location: http://www.yoursite.com/redirect-folder/index.html', true, 503);
    exit;
    

    With the current PHP redirect code you're using, the redirect is a 302 (default).

    0 讨论(0)
提交回复
热议问题