PHP处理URL中的片段标识符

scr*_*pii 5 javascript php facebook meta-tags fragment-identifier

我在这里陷入了两难境地,并希望得到社区的一些建议.这是我的问题:

我创建了一个包含大量动态内容的网站,所有内容都通过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'].'" />';
Run Code Online (Sandbox Code Playgroud)

您的第一个想法可能是:为什么不使用GET请求或查询字符串?即:

http://www.mysite.com/home?id=123

但是这种方法的问题在于Javascript无法动态更改URL的这一部分,它只能更改片段标识符.这意味着我们文章的所有直接链接都需要刷新页面.这违背了我们的整个'动态'方法 - 我可能会添加它真的很好:)

所以我现在很难过.我能想到的唯一半解决方案是使用两种方法:

在类似fb的请求中使用get参数,对于直接链接使用片段标识符.

但这会带来以下问题:

  • 如果Facebook上的直接链接从用户粘贴,它将包含片段标识符,并且正确的元数据将不会显示在Facebook上.
  • 我需要做一些奇怪的重定向魔术来修复URL的格式以删除ID(即检测是否传入GET参数并重定向到片段标识符等效物).但我不知道FB是否也会遵循重定向并从重定向页面而不是第一页获取元标记,这无论如何都会使这个解决方案无效.

对不起,文字墙!感谢您提供的任何输入.

编辑:我刚刚测试了我提出的解决方案涉及两者的组合,我可以确认Facebook遵循重定向,所以这个解决方案根本不起作用.这令人沮丧!

编辑编辑:实现我的"混合"想法的一种可能方法是使用window.location重定向而不是PHP header()调用重定向,因此Facebook从原始页面获取元标记,对于那些有类似问题的人.

谢谢.

Cri*_*isp 0

PHP 的parse_url函数返回包括哈希片段在内的所有内容,因此您可以使用parse_url和访问fragment返回数组的键

$url = 'http://www.mysite.com/home#/123';
$parts = parse_url($url);
$fragment = $parts['fragment']; // => '/123'
Run Code Online (Sandbox Code Playgroud)

或者传入componentflag PHP_URL_FRAGMENT,然后检索片段本身

$fragment = parse_url($url, PHP_URL_FRAGMENT); // => '/123'
Run Code Online (Sandbox Code Playgroud)