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

mpl*_*ner 3 authentication http-basic-authentication apache-2.2

我为目录 / 设置了基本身份验证,并想排除位置 /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>
Run Code Online (Sandbox Code Playgroud)

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

<Location "/assets/upload">
    Order deny,allow
    Allow from all
    Satisfy any
</Location>
Run Code Online (Sandbox Code Playgroud)

这里可能有什么问题?

版本:Apache/2.2.16 (Debian)

Unb*_*ver 7

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

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

<位置“/assets/upload”>
    订单拒绝,允许
    所有人都允许
    满足任何
</位置>

<位置"/">
    AuthType 基本
    身份验证名称“暂存”
    AuthUserFile /var/.../.htpasswd
    AuthGroupFile /dev/null
    需要有效用户
</位置>

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

<目录 />
    选项 FollowSymLinks
    允许覆盖无
    命令允许,拒绝
    拒绝所有人
</目录>