代码之家  ›  专栏  ›  技术社区  ›  Mask

如何在PHP中实现像SO这样的返回url?

  •  0
  • Mask  · 技术社区  · 16 年前

    有可能吗?否则,我只能硬编码所有内容。

    1 回复  |  直到 11 年前
        1
  •  3
  •   Andy E    16 年前

    如果你试图创建一个具有重定向的登录系统,你需要使用HTTP_REFERER标头来找出用户的来源,这样你就可以把他送回那里。最好的方法是,在您的登录表单中使用以下内容:

    //- Login.php
    <?php
        if ($_POST['username'] && $_POST['password'])
        {
            //- Run username and password verifying script
            header("Location: ".$_POST['returnurl']);
        }
        $RedirectURL = $_SERVER['HTTP_REFERER'];
    ?>
    <form action="/login.php" method="post">
        <input type="text" name="username" />
        <input type="password" name="password" />
        <input type="hidden" name="returnurl" value="<?php echo $RedirectURL; ?>" />
    </form>
    

    请注意,一些ISP、浏览器或代理会删除referer标头,因此您不能指望它对每个用户都能完美工作。如果你使用If语句检查标题是否存在,你可以将这些用户发送回主页或其他任何地方。

    编辑

    如果你想使用$_SERVER['REQUEST_URI'],如果你运行的是Apache,那么在重写后应该将其设置为漂亮的URL。如果您正在运行IIS,在这种情况下,您需要检查$_SERVER['X_HTTP_ORIGINAL_URL']。大致如下:

    <?php
        if (!isset($_SERVER['X_HTTP_ORIGINAL_URL']))
            $ReturnURL = $_SERVER['X_HTTP_ORIGINAL_URL'];
        else
            $ReturnURL = $_SERVER['REQUEST_URI'];
    
        header("Location: /login.php?returnurl=".$ReturnURL);
    ?>
    

    和

    //- Login.php
    <?php
        if ($_POST['username'] && $_POST['password'])
        {
            //- Run username and password verifying script
            header("Location: ".$_POST['returnurl']);
        }
        $RedirectURL = isset($_GET['returnurl'] ? $_GET['returnurl'] : "/index.php";
    ?>
    <form action="/login.php" method="post">
        <input type="text" name="username" />
        <input type="password" name="password" />
        <input type="hidden" name="returnurl" value="<?php echo $RedirectURL; ?>" />
    </form>
    
    推荐文章