3

我的 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

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

4

1 回答 1

3

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

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

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

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

然后将使用那个代替,如本草案中所述

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

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

于 2012-12-28T23:17:13.457 回答