我的站点中的文件夹受密码保护。它包含一个子站点:example.com/subsite
。我只想公开(删除密码保护)子站点主页,以便任何人都可以浏览到example.com/subsite
并获取/subsite/index.html
,但是文件夹中的任何其他页面仍需要凭据。
身份验证已经有效:
location /subsite {
auth_basic "Subsite users only.";
auth_basic_user_file /etc/nginx/subsite-pwds;
}
我可以公开主页,该主页需要其他一些资源才能工作。
# public access to home page only
location = /subsite/index.html {
auth_basic off;
}
location /subsite/assets {
auth_basic off;
}
location /subsite/img {
auth_basic off;
}
location /subsite/scripts {
auth_basic off;
}
location /subsite/stylesheets {
auth_basic off;
}
这允许任何人获取example.com/subsite/index.html
。但是我想要的是任何人都可以获取example.com/subsite
。
以上第一个位置块的以下替代方法均无效。所有人都会向example.com/subsite
# 1
location = /subsite {
auth_basic off;
}
# 2
location = /subsite/ {
auth_basic off;
}
# 3
location = /subsite {
auth_basic off;
rewrite ^ /subsite/index.html last;
}
# 4
location ~ ^/subsite$ {
auth_basic off;
}
答案 0 :(得分:1)
基于Nginx的默认行为,URI /subsite
(解析为目录)从外部重定向到/subsite/
。
索引模块将URI /subsite/
内部重定向到/subsite/index.html
。
这些URI /subsite
,/subsite/
和/subsite/index.html
中的每一个都是分别处理的,如果Nginx选择了您的location /subsite { ... }
块,它们中的任何一个都可以触发身份验证检查处理单个URI。
要绕过索引页的身份验证检查,除了问题中标识的资源URI外,您还需要一个或多个与三个URI匹配的位置。
例如:
location = /subsite {
auth_basic off;
}
location = /subsite/ {
auth_basic off;
}
location = /subsite/index.html {
auth_basic off;
}
location /subsite/assets {
auth_basic off;
}
location /subsite/img {
auth_basic off;
}
location /subsite/scripts {
auth_basic off;
}
location /subsite/stylesheets {
auth_basic off;
}