除了那些允许的Apache基本authentication

问题:我在/ var / www / files /下有一些文件,我希望它们可以从特定的IP地址访问,而不需要用户/密码。 但是,我希望任何其他IP地址都应该要求login才能获得访问权限。

这是在我的httpd.conf中:

<Directory /var/www/files/> Order deny,allow Deny from all Allow from 192.168 AuthUserFile /etc/apache2/basic.pwd AuthName "Please enter username and password" AuthType Basic Require user valid-user </Directory> 

但是,如果我理解正确,这意味着来自192.168。*的任何客户端都将有权访问该目录,但是将需要有效用户查看其内容。 而其他IP地址将被拒绝。 对?

先谢谢你。

编辑 :这可能是被接受的答案,但是老了。 对于新的Apache安装, 在这里使用Brians的答案

添加: Satisfy Any (这意味着这两个应该通过)。

而语法是:

 Require valid-user 

要么:

 Require user <userid> 

这是如何完成的Apache 2.4 +(因为Satisfy Any不再支持)。

 <Directory /var/www/files/> AuthType Basic AuthName "Please enter your username and password" AuthUserFile /var/www/files/.htpasswd <RequireAny> Require ip 22.33.44.55 Require valid-user </RequireAny> </Directory> 

如果要同时输入IP地址和Login / Password, <RequireAny> <RequireAll>更改为<RequireAll>

我希望这能帮助别人 – 因为花了我一段时间才弄明白。

如果您的服务器位于代理之后,则不能直接依赖Require ip 。 但是,您可以使用Require env

 <Directory /var/www/files/> AuthType Basic AuthName "Please enter your username and password" AuthUserFile /var/www/files/.htpasswd SetEnvIF X-Forwarded-For "22.33.44.55" AllowIP <RequireAny> Require env AllowIP Require valid-user </RequireAny> </Directory> 

这个想法的来源

 SetEnvIF X-Forwarded-For "192.168.135.159" AllowIP SetEnvIF X-Forwarded-For "192.168.135.135" AllowIP AuthType Basic AuthName "admin" AuthUserFile "/var/www/domain.com/cms/.htpasswd" <RequireAll> Require env AllowIP require valid-user </RequireAll> 

我也检查了许多变种。 这个代码üorks与2.4版本的Apache 100%