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

我有基本的身份validation设置为目录/,并希望排除位置/资产/上传,但它只是不会工作,我已经尝试了几个选项和教程。

此位置指令将清除目录authenticationconfiguration并禁用整个网站的基本authentication

<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> 

然而,我只是想/资产/上传没有基本的身份validation,但如果我将位置的第一个参数更改为/资产/上传,整个页面 ,包括/资产/上传受基本身份validation保护

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

这里有什么可能是错的?

版本:Apache / 2.2.16(Debian)

恐怕您似乎在这里误解了一些Apache的概念。 在<Directory>块中的参数是一个完整的文件系统path,而不是一个相对于服务器根的path。 你永远不应该改变默认的<Directory />块。 你不需要改变你的configuration工作。

一个<Location>块的参数相对于服务器的根。 所以你只需要其中的两个块来实现你想要的。

 <Location> / assets / upload“>
    命令否认,允许
    全部允许
    满足任何
 </位置>

 <位置> /“>
     AuthType基本
     AuthName“分段”
     AuthUserFile /var/.../.htpasswd
     AuthGroupFile / dev / null
    要求有效的用户
 </位置>

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

 <Directory />
    选项FollowSymLinks
     AllowOverride无
    订单允许,否认
    全部否认
 </目录>

在/ assets / upload目录下,放入另一个.htaccess文件。

 Allow from all Satisfy any 

这将覆盖上面目录中文件的更一般的设置,并在不需要授权的情况下提供资源。