nginx htpasswd protect适用于整个站点,但不适用于带有rewrite的子目录



我遇到了一个奇怪的问题,这是我的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;
}

该保护对整个网站都很有效,但它不适用于这个用"位置"命令定义的特定论坛文件夹,如果URL是:

https://mysite.com/forum/
https://mysite.com/forum/discussion/9/help-support

并且能够在不输入任何密码的情况下直接访问它。但奇怪的是,它在没有尾部斜杠/类似:的情况下工作

https://mysite.com/forum

提示用户名和密码。将auth_basic保护命令重复到论坛位置,如:

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

最新更新