Nginx 定位“?”后面的子页面 url

Nginx 定位“?”后面的子页面 url

我正在尝试仅为该 URL 下的一组子页面放置一个 htpasswd:

https://exemple.com/doku.php?id=staff

例如,该页面应包括:

https://exemple.com/doku.php?id=staff:modo

我尝试在 nginx 中这样做:

location ~ ^/doku.php?id=staff(.*) {

   auth_basic "Staff only";
   auth_basic_user_file /etc/nginx/.htpasswd/.htpasswd-staff;
}

但没有任何动作,甚至在主页上也是如此exemple.com/doku.php?id=staff

我也尝试过这个:

location ~ ^/doku.php(.*) {

  if ( $query_string = "id=staff" ) {
    auth_basic "Staff only";
    auth_basic_user_file /etc/nginx/.htpasswd/.htpasswd-staff;
  }
}

但无法重新加载 nginx,出现错误:

nginx: [emerg] "auth_basic" directive is not allowed here in /etc/nginx/conf.d/site.conf:31

我错过了什么 ?

答案1

我自己还没有测试过这个,但我认为这可以通过指令来实现map

http {
    map $arg_id $authrequired {
        default off;
        staff "Staff only";
    }
}

server {
    location /doku.php {
        auth_basic $authrequired;
        auth_basic_user_file /etc/nginx/.htpasswd/.htpasswd-staff;
    }
}

该指令让 nginx根据查询参数的值map给变量赋不同的值,默认值为 off,当包含“staff”时,变为“Staff only”。$authrequiredidid$authrequired

然后我们使用这个变量作为auth_basic指令。

相关内容