NGINX配置:如何匹配给定路径的任何文件类型或子文件夹?

时间:2016-05-02 10:42:53

标签: ruby-on-rails nginx

我需要通过NGINX绕过rails来处理任何属于某种路径的请求,例如:

test.com/inc/js/test.js
   -> /var/www/test/public/example/inc/js/test.js

test.com/inc/js/another/subfolder/test.js
   -> /var/www/test/public/example/inc/js/another/subfolder/test.js

test.com/inc/css/test.css
   -> /var/www/test/public/example/inc/css/test.css

test.com/inc/css/any/given/subfolders/test.css
   -> /var/www/test/public/example/inc/css/any/given/subfolders/test.css

我目前正在尝试编辑nginx配置,以便任何Web请求都映射到相应的文件:

location ~* /inc {
    root /var/www/test/public/example/inc;
    try_files $uri =404;
}

哪个不起作用 - 我认为/inc的任何请求都会相应地映射,但我显然遗漏了什么?如何将/inc的任何请求映射到正确的相应路径?

2 个答案:

答案 0 :(得分:0)

好吧,它只是对正则表达式进行了一些刷新,我设法找出了解决方案,如果有任何regexperts可以找到更优化,确实让我知道:

location ~* \/inc\/(.*)\/*\.(js|css) {
    try_files $uri =404;
}

答案 1 :(得分:0)

我认为除非你真的想限制匹配JS和CSS文件的位置,否则你甚至不需要regexp,只需重新定义root就足够了:

location /inc/ {
    root /var/www/test/public/example;
}

请求URI中匹配的/inc/将附加到给定的根,以及后面的任何内容。请参阅nginx docsroot选项下的等效示例。这应该比正则表达式更快,更节省资源。

如果您 想要仅限制与JS和CSS文件的匹配,那么您确实必须使用正则表达式:

location ~* /inc/.*\.(js|css) {
    root /var/www/test/public/example;
}