如何在PHP中进行重定向?

是否可以通过使用PHP将用户重定向到其他页面?

假设用户访问www.example.com/page.php ,我想将它们重定向到www.example.com/index.php ,但如何在不使用元刷新的情况下这样做? 可能?

这甚至可以保护我的网页免受未经授权的使用


现有答案总结加我自己的两分钱:

1.基本答案

您可以使用header()函数发送新的HTTP标头,但必须在HTML或文本之前将其发送到浏览器(例如,在<!DOCTYPE ...>声明之前)。

header('Location: '.$newURL);

2.重要细节

die()exit()

header("Location: http://example.com/myOtherPage.php");
die();

为什么你应该使用die()exit() :每日WTF

绝对网址

该网址必须是绝对的。 请参阅RFC 2616.但在大多数情况下,也会接受相对URL。

状态码

PHP的“位置”标题仍然使用HTTP 302重定向代码,但这不是你应该使用的。 您应该考虑301(永久重定向)或303(其他)。

注意:W3C提到303-header与“许多pre-HTTP / 1.1用户代理不兼容”,目前使用的浏览器都是HTTP / 1.1用户代理,对于许多其他用户代理(如蜘蛛和机器人)来说并不是这样。

3.文件

HTTP头和PHP中的header()函数

  • PHP手册说的是什么
  • 维基百科说什么
  • W3C所说的
  • 4.替代品

    您可以使用http_redirect($url);的替代方法http_redirect($url); 需要安装PECL包pecl。

    5.助手功能

    此功能不包含303状态码:

    function Redirect($url, $permanent = false)
    {
        header('Location: ' . $url, true, $permanent ? 301 : 302);
    
        exit();
    }
    
    Redirect('http://example.com/', false);
    

    这更加灵活:

    function redirect($url, $statusCode = 303)
    {
       header('Location: ' . $url, true, $statusCode);
       die();
    }
    

    6.解决方法

    正如前面提到的header()只在写出任何内容之前重定向。 如果调用内部HTML输出,它们通常会失败。 然后,您可以使用HTML标头解决方法(不是很专业!),如:

     <meta http-equiv="refresh" content="0;url=finalpage.html">
    

    或甚至JavaScript重定向。

    window.location.replace("http://example.com/");
    

    function Redirect($url, $permanent = false)
    {
        if (headers_sent() === false)
        {
            header('Location: ' . $url, true, ($permanent === true) ? 301 : 302);
        }
    
        exit();
    }
    
    Redirect('http://www.google.com/', false);
    

    不要忘了死()/退出()!


    使用echo从PHP输出JavaScript,它将完成这项工作。

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

    除非您缓冲页面输出,然后再检查重定向条件,否则您无法在PHP中真正做到这一点。 这可能太麻烦了。 请记住,标题是从页面发送的第一件东西。 大部分重定向通常在页面稍后需要。 为此,您必须缓冲页面的所有输出,并稍后检查重定向条件。 此时,您可以重定向页面用户标题()或简单地回显缓冲的输出。

    有关缓冲的更多信息(优点)

    什么是输出缓冲?

    链接地址: http://www.djcxy.com/p/891.html

    上一篇: How to make a redirect in PHP?

    下一篇: Flex: Caching images in list item renderer?