2011-07-27 104 views
2

我有一個網站正在使用apache htpasswd進行密碼保護。在密碼保護網站上允許FB共享

如何排除來自FB共享的請求,使其不受密碼保護?

這意味着,我仍然希望網站在用戶嘗試通過瀏覽器訪問時受到密碼保護,但如果請求來自FB共享ping,它應該允許。

我看到FB共享ping有這個用戶代理facebookexternalhit/1.1,但我不知道如何實現。

謝謝
三通

回答

7

這個答案假設你使用Apache 2.1或更高版本:

隨着mod_authz_host模塊,你可以在.htaccess或<位置由主機進行訪問控制>或<目錄> httpd.conf文件的部分,例如:

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

請注意,您可以在這裏使用部分域名,因此www.apac在這個例子中he.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 

然後,您可以配置在<位置訪問控制>,<目錄>,或的.htaccess如下:

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