我在这里有一个相当困难,并希望来自社区的一些建议。这是我的问题:PHP中处理URL中的片段标识符
我创建了一个网站,其中包含大量的动态内容,所有内容都通过AJAX提取并通过JS显示。我目前允许直接链接到我的内容的方式是通过与JS动态修改片段标识符,这里有一个例子:
http://www.mysite.com/home#/123
其中123是内容的ID。当内容关闭时,它会再次剥离碎片标识符。
这很好用,当人们加载页面时,我的AJAX请求正在成功请求'123'文章。但是我刚刚在所有文章上实现了Facebook按钮,现在我碰到了一堵砖墙。
基本上,Facebook找到与您喜欢的内容相关联的缩略图和标题以及URL的方式是检查传递到fb中的URL的元标记,如iframe。它通过在URL上执行GET请求来执行此操作,检查元标记的内容,然后在Facebook上显示这些内容。
问题是片段标识符没有传递到服务器,所以我没有办法在PHP(我知道)动态生成这些元标记与特定请求的文章的内容。
例如,我希望能够做这样的事情:
$id_vals = get_id_values($hash_fragment);
echo '<meta property="og:title" content="'.$id_vals['title'].'" />';
你首先想到的可能是:为什么不使用GET请求或查询字符串?即:
http://www.mysite.com/home?id=123
然而这种方法的问题是,JavaScript不能动态地改变URL的这一部分,它只能改变片段标识符。这意味着我们的文章的所有直接链接将需要页面刷新。这违背了我们整个“动态”的方法 - 我可能会添加的是非常好的:)
所以我现在很难过。我能想到的唯一的半解决方案是使用以下两种方法:
在fb like请求中使用get参数,对于直接链接使用片段标识符。
但这带来了下列问题:
- 如果直接链路从用户粘贴在Facebook上它将包括片段标识符,并且正确的元数据将不会在Facebook上显示。
- 我需要做一些奇怪的重定向魔术来修复URL的格式以删除ID(即检测GET参数是否传入并重定向到片段标识符等效项)。但我不知道FB是否也会遵循重定向并从重定向页面而不是第一页获取meta标签,这无疑会使该解决方案无用。
对不起,对文本的墙!欣赏您可以提供的任何输入。
编辑:我刚刚测试了我提出的解决方案,涉及到两者的结合,我可以确认Facebook遵循重定向,所以此解决方案根本不起作用。这令人沮丧!
编辑编辑:实现我的“混合”的想法一种可能的方式是使用了window.location重定向,而不是PHP header()函数调用的重定向,所以Facebook的从原来的页面抓取meta标签,对于那些你有类似的问题。
谢谢。
为什么Javascript不能更改URL的GET参数? –
我希望所有在SO上的新海报都能显示您所显示的努力量和研究量...... – jprofitt
Cheers jprofitt! Scott:GET参数不能被JavaScript修改而不会导致重定向。 Window.location以不同方式处理片段标识符和查询字符串。 – scrapii