登录保护根目录,但允许子目录中的所有内容?(Apache)

登录保护根目录,但允许子目录中的所有内容?(Apache)

我目前有一个设置,其中根目录受登录(密码)保护,但我需要向公众开放一个特定的子目录。无论我尝试哪种命令组合,我似乎都无法实现这一点。目前,我的设置(/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 地址和客户端请求的其他特征的访问控制是使用指令OrderAllowDeny和完成的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。不知道这是否重要。

相关内容