具有基本身份验证的 Apache2:从身份验证中排除一个位置(奇怪的行为)

具有基本身份验证的 Apache2:从身份验证中排除一个位置(奇怪的行为)

我已经为目录 / 设置了基本身份验证,并且想要排除位置 /assets/upload,但是它就是不起作用,我已经尝试了几个选项和教程。

此 Location 指令清除目录身份验证配置并禁用整个网站的基本身份验证

<Directory "/">
    AuthType Basic
    AuthName "Staging"
    AuthUserFile /var/.../.htpasswd
    AuthGroupFile /dev/null
    Require valid-user
</Directory>

<Location "/">
    Order deny,allow
    Allow from all
    Satisfy any
</Location>

但是,我只是希望 /assets/upload 没有基本身份验证,但如果我将 Location 的第一个参数更改为 /assets/upload,整个页面,包括 /assets/upload 是受基本身份验证保护...

<Location "/assets/upload">
    Order deny,allow
    Allow from all
    Satisfy any
</Location>

这可能是什么问题?

版本:Apache/2.2.16(Debian)

答案1

恐怕你似乎误解了这里的一些 Apache 概念。<Directory>块中的参数是完整的文件系统路径,而不是相对于服务器根目录的路径。你应该绝不确实改变了<Directory />默认块。您无需更改它即可使您的配置正常工作。

<Location>块的参数相对于服务器根目录。因此,您只需要两个这样的块即可实现您的愿望。

<位置“/assets/upload”>
    命令拒绝、允许
    允许所有人
    满足任何
</位置>

<位置“/”>
    AuthType 基本版
    AuthName“暂存”
    验证用户文件 /var/.../.htpasswd
    AuthGroup文件 /dev/null
    需要有效用户
</位置>

您应该在全局/服务器上下文中有一个<Directory />块(即不在任何虚拟主机内),它应该是这样的。

<目录 />
    选项 FollowSymLinks
    AllowOverride 无
    命令允许、拒绝
    全部拒绝
</目录>

答案2

在 /assets/upload 目录中,放置另一个包含以下内容的 .htaccess 文件;

Allow from all
Satisfy any

这将覆盖其上方目录中文件的更通用设置,并且在不需要授权的情况下提供资产。

相关内容