【问题标题】:Header location not working properly标题位置无法正常工作
【发布时间】:2012-12-14 03:44:24
【问题描述】:

我的 URL 是 http://www.website.ro/index.php?subiect=10046&pag=1#1006,我在这里有一个没有任何操作的表单 (<form action="" method="post">)。

提交后,我正在检查一些输入字段,如果有任何错误,我想重定向。我使用此代码:

header('Location: /index.php?subiect='.$_GET['subiect'].'&pag='.$_GET['pag']); exit();

但是重定向包含 #1006 所以我的页面变成了http://www.website.ro/index.php?subiect=10046&pag=1#1006

我尝试使用以下命令更改标题中的位置:

header('Location: http://www.google.com'); exit();

带我去的页面是:http://www.google.com#1006

为什么要这样做?

我在第一行有ob_start(),我试图删除它。没有效果。重定向后的 url 仍然有 #1006

如果我的 url 是 http://www.website.ro/index.php?subiect=10046&pag=1 并且我使用标头位置我没有问题,但如果 url 包含 #1006 则重定向后的 url 包含 to。

【问题讨论】:

标签: php header


【解决方案1】:

# 之后的部分称为片段标识符,它标识页面的一部分,即使该页面是从另一个 URL 检索的。

默认情况下,大多数浏览器会在发生 3xx 重定向时保留片段标识符,无论使用什么状态码。请参阅URL Fragment and 302 redirects 了解有关此问题的一些资源。

您可以返回一个包含片段标识符本身的 URI(甚至是空的):

header('Location: http://www.google.com/#');

然后将使用那个代替,如this draft中所指定:

例外情况是返回的 URI 已经有一个片段 标识符。在这种情况下,原始片段标识符不得为 未添加。

您还可以使用 Javascript 更改片段标识符 onclick

【讨论】:

  • 他可能会在重定向期间指定一个虚拟/空片段
  • @AlexandruCretu 你不能使用javascript,因为如果javascript被禁用你能做什么?