php重定向不';不要更改url
我知道这是一个很常见的问题,但我找不到答案 我有一个post.php,它向controller.php提交一个post表单 当它向右移动时,在控制器中执行以下操作: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
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已经包含问号。因此,您必须使用&
符号添加更多参数
对于重定向,我建议使用HTTP302found
响应状态。但你必须确保之前没有发送任何其他信息。以下标题
行之前不得有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;