如何在PHP中实现像SO一样的returnurl?

时间:2009-10-21 08:08:02

标签: php url-rewriting returnurl

在重写网址后它也应该有用。

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

1 个答案:

答案 0 :(得分:2)

如果您尝试使用重定向创建登录系统,则需要使用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,浏览器或代理会删除引​​用标头,因此您不能依赖它来为每个用户完美地工作。如果使用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>