php重定向不会更改网址

前端之家收集整理的这篇文章主要介绍了php重定向不会更改网址前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道这是一个非常常见的问题,但我找不到答案

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

header("Location: ./post?ok=1");

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

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

post.PHP中:

<form action="controller" method="post">
    <input name="test" value='test' type="text" />
    <input type="submit" value="post"  />
</form>

Controller.PHP这样:

<?PHP
    header("Location: ./post?ok=1");
?>

编辑1:

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

编辑2:

在post.PHP上面我放了

debug("post l ".count($_POST));
debug("get l ".count($_GET));

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

edit3:它有效

被阻止:

if ($success){
    header("Location: ./post?ok=1");
}
header("Location: ./post");

应该是:

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

thx all

首先你不应该使用$_SERVER [‘HTTP_REFERER’]这是不安全的.此外,客户端可能无论如何都不会发送此标头.现在我不知道如何,但我相信这可以用来劫持你的网站的东西邪恶.

最好你应该知道表单数据来自何处并将用户重定向到那里.

顺便说一句,你的重定向可能不会像预期的那样工作,因为网址已经包含了问号.所以你必须添加多参数和&标志.

对于重定向,我建议HTTP 302 Found响应状态.但你必须确保之前没有其他任何东西发送出去.在此标题行之前必须没有HTML输出或空行:

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

猜你在找的PHP相关文章