Назад | Перейти на главную страницу

Расположение подстраниц в Nginx за знаком «?» url

Я пытаюсь установить htpasswd только для группы подстраниц под этим URL:

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

Что я пропустил ?

Я сам этого не тестировал, но думаю, что это можно реализовать с помощью 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;
    }
}

В map директива заставляет nginx присваивать разные значения $authrequired переменная в зависимости от значения аргумента запроса id. Значение по умолчанию выключено, а когда id содержит "персонал", $authrequired становится "Только персонал".

Затем мы используем эту переменную для auth_basic директива.