nginx htpasswd protect适用于整个站点,但不适用于重写的子目录

时间:2013-11-21 17:12:24

标签: mod-rewrite nginx password-protection .htpasswd

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

# 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为:

,则对于使用“location”命令定义的特定论坛文件夹不起作用
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;
}

也没有帮助。有线索吗?谢谢!

1 个答案:

答案 0 :(得分:3)

因为您希望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;
}