php重定向不';不要更改url

php重定向不';不要更改url,php,redirect,header,Php,Redirect,Header,我知道这是一个很常见的问题,但我找不到答案 我有一个post.php,它向controller.php提交一个post表单 当它向右移动时,在控制器中执行以下操作: header("Location: ./post?ok=1"); 这根柱子实际上是插入的,它穿过上面的线, 但浏览器中的url似乎从未更改,最后没有ok参数 我可以使用session变量来存储这样一个success/failure参数,但这种方法应该是可行的 post.php: <form action="controlle

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

我有一个post.php,它向controller.php提交一个post表单 当它向右移动时,在控制器中执行以下操作:

header("Location: ./post?ok=1");
这根柱子实际上是插入的,它穿过上面的线, 但浏览器中的url似乎从未更改,最后没有ok参数

我可以使用session变量来存储这样一个success/failure参数,但这种方法应该是可行的

post.php:

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

在post.php中,我将

debug("post l ".count($_POST));
debug("get l ".count($_GET));
它们在提交前显示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

尝试使用HTTP状态代码303参见Oter:

header("Location: your/location", true, 303);

服务器端可能存在一些问题(例如,您的代码在设置头之前打印出一些内容)。为了调试它,您需要在php.ini中设置
display\u errors=On
,或者使用
ini\u set('display\u errors',1)
在代码中临时启用它


在大多数情况下,错误是“无法修改标题信息-标题已发送。”。确保PHP结束标记(
?>
)后没有
打印
回音
或任何空格和多余的行。

首先,您不应该使用
$\u服务器['HTTP\u REFERER']
这是不安全的。此外,客户端也可能不会发送此标头。现在我不知道怎么做,但我相信这可以用来抬高你的网站的邪恶

您应该更好地了解表单数据的来源,并将用户重定向回那里

顺便说一句,您的重定向可能无法像预期的那样工作,因为url已经包含问号。因此,您必须使用
&
符号添加更多参数

对于重定向,我建议使用HTTP
302found
响应状态。但你必须确保之前没有发送任何其他信息。以下
标题
行之前不得有HTML输出或空行:

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

这可能是服务器第二次重定向的问题

header('Location: post.php?ok=1', true, 303);
exit;

尝试将扩展名.php添加到url,以确保服务器(例如htaccess)不会将post?ok=1重定向到post.php。在附加重定向中,可能会丢失get参数。然后别忘了在标题重定向后添加一个出口。

实际上。。。您似乎没有在使用“exit”跟踪header()调用。 示例:

header( 'location: ' . $location ); exit;

header( 'location: ' . $location, true, 301 ); exit;

当您在调用后“退出”时,浏览器地址栏中的URL会发生更改,因为代码无法继续执行。否则,代码将继续执行,导致URL保持不变。

我认为您没有正确地给出表单标记的操作。。。应该是您丢失了文件的扩展名。您确定执行了head函数吗?是的,我将调试(“测试”)放在那里什么是控制器?在表单操作中,如果您想刷新当前页面,请提供适当的重定向链接或删除。“controller”->controller.php如果我在表单中放入.php,效果就不会更好,如果这是你的意思,我没有收到这些错误,并且controller没有回显任何html或其他内容。只有一些php_curl调用和header()重定向我已经放入了header(“位置:./post?ok”);并且没有更好地工作,在重定向中编辑了问题最好使用完整的url相对的url不好,浏览器可能会与源url和目标url混淆。重定向应该相对于哪个url?我尝试了其中一个标题(“位置:);和标题(“Refresh:0;url=);不起作用是的第一个应该起作用,你只需确认在标题行之前不会向客户端发送任何其他内容。所以只需将该特殊行移到更高的位置。该死的,我必须找到导致它失败的其他原因,只有一些curl_exec(..);因此它暂时不会失败,谢谢
header('Location: post.php?ok=1', true, 303);
exit;
header( 'location: ' . $location ); exit;

header( 'location: ' . $location, true, 301 ); exit;