我目前有一个设置,其中根目录受登录(密码)保护,但我需要向公众开放一个特定的子目录。无论我尝试哪种命令组合,我似乎都无法实现这一点。目前,我的设置(/etc/apache2/sites-available/000-default.conf
)是:
# access settings
<Location />
AuthType Basic
AuthName "Password Protected Area"
AuthUserFile /var/www/.htpasswd
Require valid-user
</Location>
<Location /var/www/html/some_dir>
AllowOverride All
Require all granted
Satisfy Any
Allow from all
</Location>
注意:每次更改后我都会重新启动 apache。
版本:
- Ubuntu 14.04.3 LTS
- Apache 2.4.7
答案1
您的 Apache 版本是 2.4.7,但您的配置似乎来自 Apache 2.2。请参阅运行时配置更改:
访问控制
在 2.2 中,基于客户端主机名、IP 地址和客户端请求的其他特征的访问控制是使用指令
Order
、Allow
、Deny
和完成的Satisfy
。在 2.4 中,这种访问控制以与其他授权检查相同的方式完成,使用新模块mod_authz_host. 旧的访问控制习惯用法应该被新的身份验证机制取代。
此外,Location
指示通过 URL 限制所包含指令的范围,而Directory
指示用于文件系统位置,例如您的/var/www/html/some_dir
。
这mod_authn_coreAuthType
文档中有一个关于相同情况的教科书式的例子,并附有解释:
身份验证类型
None
禁用身份验证。启用身份验证后,除非指定了不同的身份验证类型,否则每个后续配置部分通常会继承该身份验证。如果不需要对经过身份验证的部分的子部分进行身份验证,则None
可以使用身份验证类型;在以下示例中,客户端/www/docs/public
无需进行身份验证即可访问目录:<Directory "/www/docs"> AuthType Basic AuthName Documents AuthBasicProvider file AuthUserFile "/usr/local/apache/passwd/passwords" Require valid-user </Directory> <Directory "/www/docs/public"> AuthType None Require all granted </Directory>
答案2
还有一些其他相关问题,例如这里,但他们的解决方案对我不起作用。通过反复试验(包括设置的顺序),我发现了一些对我有用的设置:
<Directory /var/www/html/some_dir>
AuthType None
AllowOverride All
Require all granted
Satisfy Any
</Directory>
Location
注意从到 的变化Directory
。不知道这是否重要。