php重定向不会更改网址

6 php redirect header

我知道这是一个非常常见的问题,但我找不到答案

我是一个post.php,它将一个帖子表单提交给controller.php当它正确时,在控制器中它会:

header("Location: ./post?ok=1");
Run Code Online (Sandbox Code Playgroud)

邮件实际插入,它通过上面的行,但浏览器中的URL似乎永远不会改变,最后没有ok参数,

我可以使用会话变量来存储这样的成功/失败参数,但这种方式应该有效

post.php中:

<form action="controller" method="post">
    <input name="test" value='test' type="text" />
    <input type="submit" value="post"  />
</form>
Run Code Online (Sandbox Code Playgroud)

Controller.php这样:

<?php
    header("Location: ./post?ok=1");
?>
Run Code Online (Sandbox Code Playgroud)

编辑1:

header("Refresh:1;url=http://localhost/test/post?ok=1"); //doesn't work better
Run Code Online (Sandbox Code Playgroud)

编辑2:

在post.php上面我放了

debug("post l ".count($_POST));
debug("get l ".count($_GET));
Run Code Online (Sandbox Code Playgroud)

它们在提交前显示0,在0之后显示0

edit3:它有效

被阻止:

if ($success){
    header("Location: ./post?ok=1");
}
header("Location: ./post"); 
Run Code Online (Sandbox Code Playgroud)

应该是:

if ($success){
    header("Location: ./post?ok=1");
} else {
    header("Location: ./post");
} 
Run Code Online (Sandbox Code Playgroud)

thx all

rek*_*ire 3

首先你不应该使用$_SERVER['HTTP_REFERER']这是不安全的。此外,客户端也有可能不会发送此标头。现在我不知道如何做,但我确信这可能会被用来劫持您的网站以进行邪恶的事情。

更好的是,您应该知道表单数据来自哪里并将用户重定向回那里。

顺便说一句,您的重定向可能无法按预期工作,因为网址已经包含问号。所以你必须添加更多带&符号的参数。

对于重定向,我建议使用 HTTP302 Found响应状态。但你必须确保之前没有发送过任何其他内容。以下行之前不得有 HTML 输出或空行header

header("Location: http://".$_SERVER['HTTP_HOST']."/your/source.form", true, 302);
Run Code Online (Sandbox Code Playgroud)