2011-10-05 35 views
36

所以我想限制訪問一個網址。現在,如果他們來自給定的IP地址,則不應提示他們輸入密碼。如果他們不是來自加密IP地址,則應提示他們輸入密碼。htaccess - 使用密碼或ip白名單

所以任何一個或者:

AuthUserFile /some/path/.htpasswd 
AuthName "Please Log In" 
AuthType Basic 
require valid-user 

和:

order deny,allow 

deny from all 
allow from x.x.x.x 

回答

60

您可以使用Apache "Satisfy"指令。

下面是使用它的一個例子:

AuthType Basic 
AuthName "Please Log In" 
AuthUserFile /some/path/.htpasswd 
Require valid-user 
Order deny,allow 
Deny from all 
Allow from 127.0.0.1 
Satisfy any 

無密碼的訪問只能從127.0.0.1允許的。

希望這會有所幫助。

+0

+1這正是我做什麼。此外,如果你想禁用某些目錄中的檢查(例如某些public /),只需在subdir的'.htaccess'中放置: – pwes

+0

'允許所有'和'滿意任何' – pwes

+0

@Bob:它工作嗎? – FbnFgc

4

與Apache 2.4 Satisfy仍然可用,但deprecated

注意

提供的指令mod_access_compat已被mod_authz_host棄用。 將諸如Order,Allow或Deny之類的舊指令與像Require這樣的新指令混合在一起在技術上是可行的,但不鼓勵。創建此模塊是爲了支持僅包含舊指令的配置,以促進2.4升級。請查看升級指南瞭解更多信息。


在你的情況Allow from 1.2.3.4Require ip 1.2.3.4

取代結合幾個Require S(像Require valid-userRequire ip)可以通過Authorization Containers完成。因此,說客戶必須提供密碼或來自特定的IP地址,可以通過將指令包圍在RequireAny之前來完成。

<RequireAny> 
    Require valid-user 
    Require ip 1.2.3.4 
</RequireAny> 

雖然,這是因爲在Require

結束描述當多個Require指令在一個單一的配置部分的使用和不包含在其他的授權指令像<RequireAll>一種特殊情況,它們隱含在<RequireAny>指令中。因此,授權用戶的第一個授權整個請求,並且後續的Require指令被忽略。

換句話說,RequireAny是可選在這裏,你可以只列出

Require valid-user 
Require ip 1.2.3.4