我目前有一个设置,其中根login(密码)保护,但我需要打开一个特定的子目录给公众。 我似乎无法完成这一点,无论我尝试哪些组合的命令。 目前,我的设置( /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。
版本:
你的Apache版本是2.4.7,但是你的configuration好像来自Apache 2.2。 请参阅运行时configuration更改 :
访问控制
在2.2中,基于客户端主机名,IP地址和客户端请求的其他特征的访问控制是通过
Order,Allow,Deny和Satisfy指令完成的。在2.4中,这种访问控制与其他授权检查相同,使用新模块mod_authz_host 。 旧的访问控制成语应该被新的authentication机制所取代。
此外, Location指令通过URL限制所附指令的范围,而Directory指令用于文件系统位置,如/var/www/html/some_dir 。
mod_authn_core AuthType文档有一个相同情况的教科书示例,其解释如下:
authenticationtypes
None禁用authentication。 启用身份validation时,通常由每个后续configuration部分inheritance,除非指定了不同的身份validationtypes。 如果authentication部分的子部分不需要authentication,则可以使用authenticationtypesNone; 在以下示例中,客户端可以在不进行身份validation的情况下访问/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>
还有其他一些相关的问题,比如这里 ,但是他们的解决scheme对我来说不起作用。 通过试验和错误(包括设置的顺序),我发现了一些设置,为我做了伎俩:
<Directory /var/www/html/some_dir> AuthType None AllowOverride All Require all granted Satisfy Any </Directory>
注意从Location到Directory的变化。 不知道这是否意义重大。