2012-01-13 86 views
16

我需要在公共使用网站时应用HTTP身份验证,但我并未将其应用于本地主机。这是我认为应该工作的.htaccess。但它不起作用 - 它仍然要求我输入用户名/密码。
我在做什么错?除localhost之外的Apache身份验证

SetEnvIf Remote_Addr ^127\.0\.0\.1$ develmode 
<IfDefine !develmode> 
    AuthType Basic 
    AuthName "ADMIN" 
    AuthUserFile /path/to/.htpasswd 
    Require valid-user 
</IfDefine> 

mod_setenvif当然是启用的。

+1

http://stackoverflow.com/questions/3908592/ht-access-ip-限制性和htpasswd的 尝试 – Ascherer 2012-01-13 17:49:29

+0

你试过'SetEnvIf之后REMOTE_ADDR^127 \ .0 \ .0 \ .1 $ develmode = yes' – 2012-01-13 17:51:43

回答

25

您需要查看ordersatisfy关键字。下面是我的网站上的工作示例。首先我们告诉我们我们接受IP或USER。然后我们定义htpasswd文件路径,并且我们接受来自该文件的任何有效用户。最后,我们定义哪些客户端IP地址可以在没有认证的情况下访问我们的网络(我们拒绝所有其他IP,因此它们必须通过htpasswd进行认证)。

 
# permit by USER || IP 
Satisfy any 
# USER 
AuthUserFile /var/www/munin/.htpasswd 
AuthGroupFile /dev/null 
AuthName "Password Protected Area" 
AuthType Basic 
require valid-user 
# IP 
order deny,allow 
deny from all 
allow from 11.22.33. 
+0

非常感谢,这是工作! – Martin 2012-01-13 18:00:39

+0

让','后面没有空格!如果你拒绝,允许,Apache会给出500错误。 – guaka 2015-07-08 14:36:02

14

的Apache 2.4allowdenysatisfy不再使用,IP地址限制也与require现在做:

AuthUserFile /path/to/.htpasswd 
AuthName "Restricted Access" 
AuthType Basic 
Require ip 127.0.0.1 
Require valid-user 

如果有任何 “要求” 指令得到满足,该请求被允许。如果您想同时需要,请将它们分组在<RequireAll>区块中。

对于限制本地访问您可以使用特殊的语法Require local代替Require ip 127.0.0.1

了解更多:http://httpd.apache.org/docs/2.4/mod/mod_authz_core.html#require