我有一个使用apache htpasswd进行密码保护的开发中的网站。
如何排除来自FB共享的请求,使其不受密码保护?
意思是,当用户尝试通过浏览器访问时,我仍然希望该站点受密码保护,但如果请求来自FB共享ping,则应允许该站点。
我看到FB共享ping有这个用户代理,facebookexternalhit / 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>