我已经尝试了很多次 nginx 设置来阻止对任何不需要的目录的访问,但每次添加目录时都要添加几行新代码,这真的很烦人。我查看了几个论坛,但似乎没有一种语法有效。我尝试了语法^~ /(dir|dir2)/
、^~ (/dir|/dir2)/
等等^~ (/dir/|/dir2/)
,但就像我说的,这些都不起作用,唯一的解决方案似乎是限制每个目录,在我看来这真的很糟糕。
如果您了解任何类型的语法,并且可能在这种情况下起作用,我将非常感激以任何形式回答。
操作系统:Debian GNU/Linux 10 (buster) nginx 版本:nginx/1.14.2
location ^~ /includes/ {
deny all;
return 403;
}
location ^~ /vendor/ {
deny all;
return 403;
}
location ^~ /packages/ {
deny all;
return 403;
}
location ^~ /res/ {
deny all;
return 403;
}
location ^~ /styles/ {
deny all;
return 403;
}
答案1
这^~
意味着 nginx 将始终使用前缀匹配,而不检查正则表达式。
要使用正则表达式匹配,您需要使用:
location ~ ^/(?:includes|vendor|packages|res|styles)/ {
~
告诉 nginx 这是一个正则表达式^
匹配请求字符串的开头/
匹配 URI 开头的斜杠()
通常会声明一个捕获组。但是,?:
阻止捕获|
在组内用作“或”。