我试图找出如何使用nginx阻止特定目录,同时允许访问该目录中的资源(包括任何子目录)。例如,
但是,应该阻止 /static
应该可以访问/static/whatever.css
。
我尝试过类似的东西,但它没有工作:
location ^~ /static/ {
deny all;
return 404;
}
location ^~ /static/* {
allow all;
}
有办法做到这一点吗?
答案 0 :(得分:2)
这是不正确的语法。你可能想写:
location = /static/ {
deny all;
}
location /static/ {
}
return 404
是多余的,因为deny all
将返回403. allow all
是多余的,因为它是默认操作。我删除了^~
修饰符,应添加该修饰符以防止location
被任何潜在的正则表达式位置覆盖。有关位置语法,请参阅this document。
但是,似乎唯一要拒绝的URI是目录本身,可能是为了禁用继承的index
指令。这可能也有效(有或没有^~
修饰符 - 见上文):
location /static/ {
try_files $uri =404;
}
通过从$uri/
指令中省略/
元素(注释尾随try_files
),将忽略index
指令。有关详情,请参阅this document。