为什么我无法摆脱 Facebook 用户代理?

Why i can't get rid the Facebook user-agent?

我想使用一些 permalink slug,允许用户分享 link (url.com/artist/songtitle) 及其 Facebook 图片,url、描述等(将用户重定向到 url.com/#/artist/songtitle)。所以我决定向 Facebook 用户代理显示 OG 元并将其与重定向器分开。

但是,当我使用 Facebook Debug Tools and try to fetch it 时,问题就来了。爬虫没有被我的用户代理分隔符捕获。

我正在使用此代码来检测 Facebook 爬虫。有解决此问题的想法吗?

strpos($_SERVER["HTTP_USER_AGENT"], "facebookexternalhit/") || strpos($_SERVER["HTTP_USER_AGENT"], "Facebot"

您可能想要使用 stristrregex 而不是 strpos。现在,您的代码将不匹配 FacebookExternalHit,因为它包含大写字母并且 strpos 函数是 CaseSenSiTive.


Facebook 用户代理是:

FacebookExternalHit/1.0
FacebookExternalHit/1.1
facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)
facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)
facebookexternalhit/1.0 (+https://www.facebook.com/externalhit_uatext.php)
facebookexternalhit/1.1 (+https://www.facebook.com/externalhit_uatext.php)

我正在使用下面的代码检测 PHP 中的 FB User-Agent,它按预期工作:

$agent = $_SERVER['HTTP_USER_AGENT'];
if(stristr($agent, 'FacebookExternalHit')){
    //Facebook User-Agent
}else{
    //Other User-Agent
}

更新:

为了知道 FB 正在使用哪些用户代理,请尝试将用户代理请求保存到一个文件中,即:

保存 UA 请求的示例代码:
创建一个名为 ua_log.txt 并具有 写入权限 .

的文件
<?php
$agent = $_SERVER['HTTP_USER_AGENT'];
file_put_contents("$agent\n", "ua_log.txt", FILE_APPEND);    

ua_log.txt 上使用 FB 用户代理 创建您的过滤器。

搞清楚。编写 og:url 元时要小心,爬虫会跟踪它。因此,请确保您在 og:url 中写入的页面是正确的。