在PHP重定向期间处理片段标识符

时间:2012-09-30 22:35:06

标签: php jquery redirect fragment-identifier jquery-bbq

我搜索过(SO和Google)并且找不到其他人如何处理这种情况的正确解释。

在我的应用程序中,我使用PHP / Apache作为后端,并使用Ben Alman's jQuery BBQ plugin作为hashtag浏览器历史记录。用户登录仅由PHP服务器端使用来自登录页面的POST和使用服务器端会话维护的状态来处理。我遇到的问题是,如果用户访问带有片段(散列)的URL并且他们未登录,则会将其重定向到HTTPS登录页面。这适用于所有情况,除非URL包含片段哈希。对于从服务器端发起的任何重定向,情况也是如此。在重定向之前,由于页面加载从未在重定向之前完成,因此在这种情况下可以使用javascript来保留主题标签。

我意识到片段在重定向期间会丢失(因为它只是客户端)并且从未被服务器端看到,但是其他人如何处理这种情况并保留最初访问过的URL以便用户可以结束登录或重定向后在正确的页面上?

任何建议表示赞赏。感谢。

1 个答案:

答案 0 :(得分:0)

使用JavaScript使用片段填充隐藏的输入。

<input type="hidden" name="fragment" id="fragment">
<script>
if(window.location.hash){
    document.getElementById("#fragment").value=window.location.hash;
}
</script>

然后在后端,您可以像这样重定向:

if(isset($_POST['fragment'])) {
    $fragment = '#'.$_POST['fragment'];
} else {
    $fragment = '';
}
header('Location: http://website/path'.$fragment);
exit;

您应该可能为片段编码。