htaccess - 使用密码或ip白名单

时间:2011-10-05 20:00:20

标签: .htaccess

所以我想限制对网址的访问。现在,如果他们来自给定的IP地址,则不应提示他们输入密码。如果他们不是来自givin 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

3 个答案:

答案 0 :(得分:62)

您可以使用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进行无密码访问。

希望这有帮助。

答案 1 :(得分:6)

使用Apache 2.4 Satisfy仍然可用,但deprecated

  

注意

     

mod_access_compat提供的指令已被mod_authz_host弃用。 将旧的指令(如Order,Allow或Deny)与新的指令(如Require)混合在技术上是可行的,但不鼓励。此模块的创建是为了支持仅包含旧指令的配置,以便于2.4升级。有关详细信息,请查看升级指南。

在您的情况下,Allow from 1.2.3.4替换为Require ip 1.2.3.4

可以通过Authorization Containers合并多个Require(例如Require valid-userRequire ip)。所以说客户端必须提供密码或来自特定的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

答案 2 :(得分:0)

这对我来说很完美:

AuthType Basic
AuthName "myserver publicname"
AuthUserFile "/myserverpath/.htpasswds/public/passwd"
require ip 100.12.255.233
require valid-user

注意: 只需在“需要有效用户”之前放置“需要 ip”和“我的示例 ip”,它就可以解决问题。我可以在不需要密码的情况下从我的 ip 登录,但如果我从其他位置或我的移动设备访问,我需要密码。

设置“满足任何”对我来说并不好(!),因为它禁用了我应用程序较低层次结构中的其他 .htaccess 设置,并使我的网站不安全。