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

tee*_*ink 2 apache facebook

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

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

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

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

谢谢,
Tee

小智 7

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

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

<Location />
  Allow from apache.org
  Allow from .net example.edu 
</Location>
Run Code Online (Sandbox Code Playgroud)

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

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

LoadModule authz_host_module modules/mod_authz_host.so
Run Code Online (Sandbox Code Playgroud)

这样做的一个缺点是它将为每次访问执行反向查找,这可能是也可能不是您的性能问题.

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

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

LoadModule setenvif_module modules/mod_setenvif.so
Run Code Online (Sandbox Code Playgroud)

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

SetEnvIf User-Agent ^facebookexternalhit/1\.1 let_me_in
<Location />
  Order Deny,Allow
  Deny from all
  Allow from env=let_me_in
</Location> 
Run Code Online (Sandbox Code Playgroud)