2011-10-05 33 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