PHP发布/重定向/谷歌浏览器失败

时间:2013-03-11 06:02:08

标签: php google-chrome post-redirect-get

我尝试在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。

2 个答案:

答案 0 :(得分:3)

您的代码似乎没问题,我猜您遇到的问题与Issue 177855: Wrong handling of Redirection in Chrome 25

有关

答案 1 :(得分:-1)

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

此外,使用锚标记将某人直接链接到新页面或使用环形路径(例如:

)会更有意义。

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

检查$ _GET [“act”]是否等于“转发”,而不是检查表格是否已发送。