3

我尝试在 PHP 中实现 POST/REDIRECT/GET 设计模式,当我重定向到完全相同的页面时,它适用于 Safari,但不适用于 Google Chrome(适用于 Mac)。如果我稍微改变 URL(比如添加一个斜杠),它就可以正常工作。

这是一个功能齐全的示例:

<?php
if(TRUE === isset($_POST['submit'])) {
    header('Location: http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'], true, 303);
    exit();
}?>
<html><head></head><body>
<form action="" method="post"><input type="submit" name="submit" value="submit" /></form>
</body></html>

当我转到页面并单击提交按钮然后刷新页面时,我得到一个对话框,要求我确认重新提交表单数据。我所有的搜索都表明,上面的代码是实现 POST/REDIRECT/GET 的正确方法,并且应该可以工作(在 Safari 中也可以),但它不适用于 Mac 上的 Chrome。

4

2 回答 2

3

您的代码似乎没问题,我猜您遇到的问题与问题 177855:Chrome 25 中的重定向错误处理有关

于 2013-03-11T06:17:49.187 回答
-1

刷新您发布到的页面会为您提供该弹出框,因为浏览器想知道它是否应该重新发送最初将您带到该页面的数据。所有形式都会发生这种情况。你说它在chrome中不起作用。你有错误吗?它只是不重定向吗?

此外,使用锚标记将某人直接链接到新页面会更有意义,或者使用迂回的方式,例如:

<a href="http://<?php echo $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'] ?>?act=forward">Forward</a>

并检查 $_GET["act"] 是否等于 "forward",而不是检查表单是否已发送。

于 2013-03-11T06:07:21.287 回答