所以我想限制对网址的访问。现在,如果他们来自给定的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
答案 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-user
和Require 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 设置,并使我的网站不安全。