允许在受密码保护的站点上共享FB

时间:2011-07-27 18:44:36

标签: facebook apache

我有一个使用apache htpasswd进行密码保护的开发中的网站。

如何排除来自FB共享的请求,使其不受密码保护?

意思是,当用户尝试通过浏览器访问时,我仍然希望该站点受密码保护,但如果请求来自FB共享ping,则应允许该站点。

我看到FB共享ping有这个用户代理,facebookexternalhit / 1.1,但我不知道如何实现它。

谢谢你,
三通

1 个答案:

答案 0 :(得分:7)

这个答案假设你使用的是Apache 2.1或更高版本:

使用mod_authz_host模块,您可以通过.htaccess或< Location>中的主机名进行访问控制。或<目录> httpd.conf文件的一部分,例如:

<Location />
  Allow from apache.org
  Allow from .net example.edu 
</Location>

请注意,您可以在此处使用部分域名,因此在此示例中将允许访问www.apache.org。

要确保安装mod_authz_host,请在httpd.conf中检查类似于以下内容的行:

LoadModule authz_host_module modules/mod_authz_host.so

这样做的一个缺点是它会针对每次访问执行反向查找,这可能会或可能不会成为您的性能问题。

另一种选择是通过User-Agent进行限制。但是,这是一种不可靠的技术,因为User-Agent很容易被欺骗。但根据你的偏执程度,它可能适合你的目的:D

User-Agent限制,除了mod_setenvif模块之外,还需要确保加载mod_authz_host模块。在httpd.conf中检查类似于以下内容的行:

LoadModule setenvif_module modules/mod_setenvif.so

然后,您可以在&lt; Location&gt;,&lt; Directory&gt;或.htaccess中配置访问控制,如下所示:

SetEnvIf User-Agent ^facebookexternalhit/1\.1 let_me_in
<Location />
  Order Deny,Allow
  Deny from all
  Allow from env=let_me_in
</Location>