【问题标题】:header location not redirecting at once, looking for alternative标头位置未立即重定向,正在寻找替代方案
【发布时间】:2012-01-05 04:40:44
【问题描述】:

我正在编写一个脚本,其中最后有一个重定向标头。

然后,如果出现特定条件,我会在中间添加一个重定向标头。

我很惊讶地注意到最后一个标头(“Location:http//mydomain.com”)是触发的标头。我以为标题会自动从页面“跳转”,但它似乎只是将它保存在内存中并首先遍历整个页面。

关于“切割”流程和更改页面的“正确”方法是什么?

<?php
$specific_condition=true;
// I wanted this to be the end
if($specific_condition) header("Location: http://google.com/"); 
// But it still triggers following redirect
header("Location: http://bing.com/");
?>

【问题讨论】:

    标签: php redirect header location


    【解决方案1】:

    总是在您的 Location 标头之后立即调用 exit;

    if($specific_condition) {
        header("Location: http://google.com/"); 
        exit;
    }
    

    header() 函数本身只是收集要发送给客户端的标头。所以它不应该在任何特定的标头之后停止执行,例如Location。但只要在您决定重定向用户之后 做某事没有意义 - 使用 exit

    【讨论】:

    • 太棒了,解决了它。现在我只需要等待 10 分钟即可接受您的回答。 :)
    【解决方案2】:

    你可以使用变量来保存位置地址

    这样,你也可以在设置新位置后执行一些代码。

    $location = 'http://bing.com/';
    $specific_condition=true;   
    if($specific_condition) $location = 'http://google.com';
    
    //do something else
    header("Location: " . $location);
    

    【讨论】:

    • you can also execude some code after new location is set. --- 这绝对是 毫无意义。您要么决定重定向,要么不决定。之后不执行,只要连处理都不能保证完成
    • 虽然这是个好方法,但还是应该使用exit
    • 确定这行得通,但这不是我想要的。我正在寻找一种无需在页面中运行更多代码即可重定向的方法,而 exit 就是这样做的。
    猜你喜欢
    • 1970-01-01
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多