有一个 URL /index.php
。如果将参数“foo”设置为“bar”,则应限制对它的访问,即/index.php
任何人都可以自由打开,并且/index.php?foo=bar
只有在获得基本授权后才能打开。我知道这个if
指令,
location = index.php {
if ($arg_foo ~ bar) {
auth_basic "";
auth_basic_user_file myauth;
}
fastcgi_pass unix:/var/run/php-fpm.socket;
}
…但是单独的location
withif
不允许auth_basic
放在if
子句中。所以我认为应该有某种rewrite
到其他位置的方法,可能传递一个包含我们想要到达的原始位置的标头,检查标头,在通过身份验证后,重写到该位置,但这一切看起来太像黑客了,可能可以更轻松地完成,但我不知道怎么做。
答案1
我建议你使用map
, 自从auth_basic
具有禁用身份验证的特殊off
值:
http {
[...]
map $arg_foo $auth_realm {
default off;
~bar "";
}
server {
[...]
location = /index.php {
auth_basic $auth_realm;
auth_basic_user_file myauth;
fastcgi_pass unix:/var/run/php-fpm.socket;
}
}
}
注意:我怀疑您提供的配置片段不起作用,因为该location
指令的 URI 前缀不是以强制/
字符开头。