2016-04-15 83 views
0

我想弄清楚如何使用nginx阻止一个特定的目录,同时允许该目录的资源(包括任何子目录)是可访问的。例如,nginx:块目录,但允许访问子目录

/static应被阻止,但 /static/whatever.css应可访问。

我想这样的事情,但它没有工作:

location ^~ /static/ { 
     deny all; 
     return 404; 
    } 

    location ^~ /static/* { 
     allow all; 
    } 

有没有办法做到这一点?

回答

0

这是不正确的语法。你大概的意思是写:

location = /static/ { 
    deny all; 
} 

location /static/ { 
} 

return 404是多余的,因为在deny all将返回403 allow all是多余的,因为它是默认操作。我删除了^~修饰符,应该添加该修饰符以防止location被任何潜在的regex位置覆盖。有关位置语法,请参阅this document

但是,您想要拒绝的唯一URI似乎是目录本身,可能会禁用继承的index指令。这也可以工作(带或不带^~修改 - 见上文):

location /static/ { 
    try_files $uri =404; 
} 

通过省略$uri/元素(注意尾随/)从try_files指令,该指令index被忽略。有关更多信息,请参阅this document

+0

谢谢理查德。我尝试了你提供的例子('uri'和$ uri /'),但是我在'/ static/whatever.css'上得到了一个'404'错误。你的假设是正确的,我只想拒绝访问目录本身,同时允许访问所有子目录或资源。 – cookandy

+0

@cookandy您可能需要显示更多或您的配置。 404响应可能由错误配置的“根”或冲突的“位置”块引起。 –

相关问题