我正在尝试仅为该 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”。$authrequired
id
id
$authrequired
然后我们使用这个变量作为auth_basic
指令。