我需要通过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
的任何请求映射到正确的相应路径?
答案 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 docs中root
选项下的等效示例。这应该比正则表达式更快,更节省资源。
如果您 想要仅限制与JS和CSS文件的匹配,那么您确实必须使用正则表达式:
location ~* /inc/.*\.(js|css) {
root /var/www/test/public/example;
}