我确信这很简单,但是今天早上谷歌不是我的朋友。
目标是:
/public... 是公开可访问的
其余所有内容(包括 /)都需要基本身份验证。
这是一个 WSGI 应用程序,带有一个 WSGI 脚本(如果有关系的话,它是一个 django 站点..)
我有这个:
<Location /public>
Order deny,allow
Allow from all
</Location>
<Directory />
AuthType Basic
AuthName "My Test Server"
AuthUserFile /path/to/.htpasswd
Require valid-user
</Directory>
使用此配置,基本身份验证可以正常工作,但该Location
指令被完全忽略。我并不感到惊讶,因为根据这(参见各部分如何合并),Directory
首先处理该指令。
Directory
我确信我遗漏了一些东西,但由于目录适用于文件系统位置,而我实际上只有一个/
,并且Location
我希望允许访问,但Directory
总是覆盖Location
...
编辑
我正在使用 Apache 2.2,它不支持AuthType None
。
答案1
对于 Apache 2.2(可能还有 2.3 之前的 2 系列中的其他版本):
<Location /public>
Satisfy any
Allow from all
</Location>
<Location />
AuthType Basic
AuthName "My Test Server"
AuthUserFile /path/to/.htpasswd
Require valid-user
</Location>
答案2
对于 Apache 2.0,AuthType None
在您的节中设置<Location /public>
:
<Location /public>
AuthType None
Order deny,allow
Allow from all
</Location>
http://httpd.apache.org/docs/trunk/mod/mod_authn_core.html#AuthType