Я пытаюсь установить 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
директива.