Я пытаюсь поместить 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
содержит «Staff», $ authrequired
становится «Только Staff».
Затем мы используем эту переменную для директивы auth_basic
.