【问题标题】:PHP Header Location adding current anchor during second redirectPHP Header Location 在第二次重定向期间添加当前锚点
【发布时间】:2014-03-14 07:32:57
【问题描述】:

我正在向自己提交一个表单,并在 URL 中添加了一个锚点,这样当出现错误时,表单可以保证在视口中,这是一个简化的示例...

<form id="my_form" action="/form_link/#my_form" method="POST">
...
</form>

/form_link/ 收到表单后,它会对其进行处理,当出现错误时,它会继续再次加载页面并显示错误。

但是,当帖子成功时,它会使用...重定向到不同的页面

header('Location: /another_link/');
die;

问题是当我最终到达重定向链接时,URL实际上是......

/another_link/#my_form

而不是预期的......

/another_link/

我很茫然,锚是在事后添加的,所以我没有什么可以剥离的。如何防止这种行为?


编辑: 原因可能是因为在表单提交和重定向之间尚未向浏览器输出任何内容?无论如何要清除标题中维护锚目标的任何内容?


编辑 2:headers_sent() 报告的已发送标头是:

[0] => X-Powered-By: ZendServer 6.3.0
[1] => Set-Cookie: ZDEDebuggerPresent=php,phtml,php3; path=/
[2] => Expires: Thu, 19 Nov 1981 08:52:00 GMT
[3] => Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
[4] => Pragma: no-cache
[5] => Access-Control-Allow-Origin: **REMOVED**
[6] => Access-Control-Allow-Methods: GET, POST, OPTIONS
[7] => Access-Control-Allow-Headers: X-Requested-With

所以我没有看到任何会影响后续使用的东西?!?!

【问题讨论】:

  • 只需将哈希值添加到位置 URL,这将产生如下内容:/some_link/#。另一种方法是做一些 URL 重写规则。
  • @Poldas 最后尝试了空哈希#,没有效果。而关于重写,不得不依靠apache为我做那种工作似乎很荒谬,我宁愿了解标题在哪里维护锚点。我有一种感觉,因为在重定向之前没有向浏览器输出任何内容。
  • @user1844933 对不起,我不知道这是指什么。
  • @oucil 您是否尝试过使用完整路径位置?是否有可能在第二次重定向之前发送标头?
  • @Poldas 我刚刚更新了有关已发送标头的详细信息的问题,没有运气

标签: php forms redirect header submit


【解决方案1】:

锚不作为请求的一部分发送到服务器; PHP对此一无所知。您看到的是客户端(浏览器)行为。我刚刚测试了其他 HTTP 响应(301、303、304),结果是一样的。

我建议在出现错误时使用 JavaScript 向下滚动到表单,而不是依赖 URL。

【讨论】:

  • 这更有意义,不是我希望的,而是现在可以使用的东西,谢谢。
猜你喜欢
  • 1970-01-01
  • 2012-11-30
  • 2017-08-13
  • 1970-01-01
  • 2011-12-17
  • 2017-10-28
  • 1970-01-01
  • 2017-02-11
  • 1970-01-01
相关资源
最近更新 更多