避免重定向循环

时间:2016-02-25 05:19:38

标签: php html redirect header maintenance

我已经完成了在我的网页上设置维护功能。这是index.php代码

    <?php
        session_start();
        require_once("system/functions.php");
        require_once("system/config.php");
        if($maintenance == 1){
            require_once(header("Location: index.php?page=maintenance"));
            die();
            session_destroy();
        }elseif($maintenance == 0)
        {
            getPage();
        }
    ?>

我也试过

    header("Location: index.php?page=maintenance");

而不是上面的一次头部代码。 但是,如果我把

    require_once("frontend/pages/maintenance.php");

它会起作用。那么问题是人们可以在地址栏中键入他们想要的每个页面,这将显示出来。我需要它使用它自己的url(它与上面的2个头代码一起工作,但是我得到了太多重定向错误)并且无论如何,你将被重定向到这个url以查看维护屏幕

maintenance.php文件的php部分:

<?php
if($maintenance == 0){
    header("Location: index.php?page=index");
    die();
}
else{
    header("Location: index.php?page=maintenance");
    die();
}
?>

我可以删除maintenance.php文件中的else代码部分,但是它总是会重定向到“websitename”/index.php(尽管仍然是维护屏幕,与上面提到的问题相同)

所以我需要更改我的代码所以当有维护时,你将被重定向到index.php?page = maintenance,无论如何。对不起,如果我错过了一些细节,已经很晚了。如果需要,请随时问我这个问题:)

1 个答案:

答案 0 :(得分:1)

事实上,这看起来像是在循环。当你在index.php脚本中时执行以下命令:

require_once(header("Location: index.php?page=maintenance"));

所以你实际上再次加载了你已经运行的脚本。它将再次找到 maintenance == 1 并再次做同样的事情。

您应该只重定向一次,然后当您看到已经在页面上时=维护 URL实际显示您要显示为维护消息的内容,如下所示:

session_start();
require_once("system/functions.php");
require_once("system/config.php");
if($maintenance == 1){
    if ($_GET['page']) == 'maintenance') {
        // we have the desired URL in the browser, so now
        // show appropriate maintenance page
        require_once("frontend/pages/maintenance.php");
    } else {
        // destroy session before exiting with die():
        session_destroy();
        header("Location: index.php?page=maintenance");
    }
    die();
}
// no need to test $maintenance is 0 here, the other case already exited
getPage();

确保在 frontend / pages / maintenance.php 重定向到 index.php?page = maintenance ,否则您将仍然进入循环。

所以 frontend / pages / maintenance.php 应如下所示:

// make sure you have not output anything yet with echo/print
// before getting at this point:
if($maintenance == 0){
    header("Location: index.php?page=index");
    die();
}
// "else" is not needed here: the maintenance==0 case already exited

// display the maintenance page here, but don't redirect.
echo "this is the maintenance page";
// ...