它也应该在 url 重写后工作。
有可能吗?否则我只能硬编码所有内容。
如果您尝试创建一个带有重定向的登录系统,您需要使用 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>