标题发送后重定向用户

时间:2011-08-15 15:00:46

标签: php redirect

据我所知,只要数据已发送到浏览器,就无法修改标题。

有没有办法(使用PHP)我可以执行重定向将用户带到另一个页面(显然不使用标题)

如果是这样,请指点我一些文件?

7 个答案:

答案 0 :(得分:32)

决定编写自己的php函数,实现javascript重定向。请参阅下面的代码。

function redirect($url)
{
    $string = '<script type="text/javascript">';
    $string .= 'window.location = "' . $url . '"';
    $string .= '</script>';

    echo $string;
}

答案 1 :(得分:6)

您可以使用Javascript或Meta标签。但是,如果您不希望修复代码以在处理后显示输出,那么只需打开该站点的.htaccess文件中的output_buffering即可。

php_flag output_buffering on

您要将.htaccess文件中的内容打开。即使您在处理过程中输出内容,它也会允许重定向。这是因为输出缓冲区将缓冲区保存到最后,因此在。之前没有数据发送。

答案 2 :(得分:4)

我认为输出缓冲不是一种选择,因为你提到数据已被发送。使用元重定向,或输出处理此问题的JavaScript。

前者可以通过将以下内容添加到<head>部分

来实现
<meta http-equiv="refresh" content="0; url=http://example.com/">

对于后者,写下以下内容可能会有所帮助:

<script type="text/javascript">
    window.location = "http://example.com/";
</script>

http://example.com/替换为您的目标网址。请注意,如果确实已经发送了一些数据,则后者可能更难实施。

警告:这两种方法都可以在客户端阻止,但从技术上讲,301和302可以重定向。

答案 3 :(得分:3)

在您决定重定向网页之前,也许可以使用output buffer

恕我直言,否则只有使用HTML元重定向或JavaScript重定向的方法。

答案 4 :(得分:1)

这是我用来重定向的php函数。如果未发送标题,则使用“标题(位置)”,否则使用javascript函数。

 function redirect($url)
{
    $baseUri=_URL_;

    if(headers_sent())
    {
        $string = '<script type="text/javascript">';
        $string .= 'window.location = "' . $baseUri.$url . '"';
        $string .= '</script>';

        echo $string;
    }
    else
    {
    if (isset($_SERVER['HTTP_REFERER']) AND ($url == $_SERVER['HTTP_REFERER']))
        header('Location: '.$_SERVER['HTTP_REFERER']);
    else
        header('Location: '.$baseUri.$url);

    }
    exit;
}

答案 5 :(得分:1)

在我的案例中工作 ob_start

Javascript解决方案看起来如此......奇怪

答案 6 :(得分:0)

PHP doe不提供任何其他方式,据我记得(http协议的限制),但你可以用javascript做到这一点,但它是一个完全不同的过程:使用js,它是页面的内容告诉浏览器执行重定向,而不是服务器。