Nginx:除索引页外的密码保护文件夹
Nginx: password protect folder except index page
我站点中的一个文件夹受密码保护。它包含一个子站点: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
。
None 上面第一个位置块的以下替代方案有效。都对 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;
}
基于 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;
}
我站点中的一个文件夹受密码保护。它包含一个子站点: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
。
None 上面第一个位置块的以下替代方案有效。都对 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;
}
基于 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;
}