我正在运行一个安全链接定向服务(expiringlinks.co)。如果我更改 php 中的标头来重定向访问者,那么当用户通过 facebook 相互发送链接时,facebook 就能够显示我重定向到的网站的预览。我希望避免这种情况。现在,我正在使用 AJAX 调用来获取要重定向的 URL 和 javascript,但这会给不使用 javascript 的用户带来问题。
以下是我想要阻止 Facebook 的多种方法,但我似乎无法开始工作:
我尝试阻止 facebook 机器人(facebookexternalhit/1.0 和 facebookexternalhit/1.1),但它不起作用,我认为他们没有使用它们来实现此功能。
我正在考虑屏蔽 Facebook IP 地址,但我无法找到所有这些地址,并且我认为除非我获得所有这些地址,否则这不会起作用。
我想过使用验证码甚至按钮,但我无法让自己对访问者这样做。更不用说我认为没有人会使用该网站。
我在 Facebook 文档中搜索了可以“选择退出”的元标签,但没有找到,并且怀疑如果有的话我是否会相信它。
有什么创意或想法如何实施上述想法吗?提前非常感谢!
试试这个 - 它对我有用......
<?php
$ua = $_SERVER['HTTP_USER_AGENT'];
if (preg_match('/facebookexternalhit/si',$ua)) {
header('Location: no_fb_page.php');
die() ;
}
?>
您可以尝试获取网络服务器的日志文件,并在那里搜索不常用的用户代理。 (可能包含脸书) 或者,以其他方式获取日志并删除所有包含 internet explorer/firefox/opera... 那么最终你应该只有机器人用户代理。 然后你就可以搜索facebook了。
您可以尝试使用元刷新而不是 JavaScript 重定向。它们适用于所有浏览器,并且由于页面仍然返回 200 响应,因此任何爬虫都应该在那里停止解析。
可以使用 geoip2 模块在 nginx 中完成。
例如,此块转到配置的 http { 部分
/etc/nginx/conf.d/geoip.conf
geoip2 /usr/share/GeoIP/country_asn.mmdb { # if you have some database update script, you can configure auto reload # auto_reload 1h; $geoip2_asn asn; $geoip2_as_name as_name; $geoip2_continent continent; $geoip2_continent_name continent_name; $geoip2_country country; }
并在指定地点使用它
将其放置在适当的位置
if ($geoip2_asn = "AS32934") { return 402; }
您需要做的就是适当设置 robots.txt。