Mod rewrite nginx-htpasswd-protect可以很好地用于整个站点,但不是具有重写功能的子目录

Mod rewrite nginx-htpasswd-protect可以很好地用于整个站点,但不是具有重写功能的子目录,mod-rewrite,nginx,password-protection,.htpasswd,Mod Rewrite,Nginx,Password Protection,.htpasswd,我遇到了一个奇怪的问题,这是我的NGINX conf文件 # For whole site location / { auth_basic "Restricted"; auth_basic_user_file /home/john/.htpasswd; } # Forum rewrite location /forum/ { try_files $uri $uri/ @forum; } location @forum { rewrite ^/forum/(.+)

我遇到了一个奇怪的问题,这是我的NGINX conf文件

# For whole site
location / {
    auth_basic "Restricted";
    auth_basic_user_file /home/john/.htpasswd;
}

# Forum rewrite
location /forum/ {
    try_files $uri $uri/ @forum;
}
location @forum {
    rewrite ^/forum/(.+)$ /forum/index.php?p=$1 last;
}
该保护对整个站点都很有效,但对于使用“location”命令定义的特定论坛文件夹,如果URL为:

https://mysite.com/forum/
https://mysite.com/forum/discussion/9/help-support
并且可以直接访问它,而无需输入任何密码。但奇怪的是,它在没有尾部斜杠的情况下工作:

https://mysite.com/forum
提示用户名和密码。将auth_basic protection命令重复到论坛位置,如:

location /forum/ {
    auth_basic "Restricted";
    auth_basic_user_file /home/john/.htpasswd;
    try_files $uri $uri/ @forum;
}

也没用。有什么线索吗?谢谢大家!

因为您希望整个站点的auth_basic处于活动状态,所以您可以将其包含在服务器块或http(s)块中

auth_basic "Restricted";
auth_basic_user_file /home/john/.htpasswd;

# Forum rewrite
location /forum/ {
  try_files $uri $uri/ @forum;
}
location @forum {
  rewrite ^/forum/(.+)$ /forum/index.php?p=$1 last;
}