简短版本:有没有简单的方法可以自动将 /templates/my_child_theme/main/sidebar/user_nav.html 等路径重定向到 / templates /默认/ main / sidebar / user_nav.html 只要遇到404?
问题:是否有一种简单的方法可以在nginx中使用类似try_files的内容来更改文件路径,当找不到最后具有相同文件路径的其他文件夹时?我目前正在使用客户端框架(AngularJS)并且处理检查文件是否存在相当昂贵,因为我在为执行逻辑交换输出之前逐字地为每个文件执行AJAX调用并查找404 Javascript中的路径。我已经看到类似的后备图像解决方案,但还没有得到一个很好的解决方案。以下是我要做的事情的要点:
背景故事: 我一直在AngularJS中构建一个具有相当复杂的模板设置的站点。我正在利用Angular UI中令人敬畏的ui-router模块进行深度嵌套视图,并编写了一些自定义函数来实现类似于Magento的后备系统的子主题。以下是目前发生的情况:
AngularJS使用我编写的getTemplate()函数请求模板路径,该函数首先通过执行XMLHttpRequest查找/ templates / child_theme_name_here / filepath 中的文件,检查状态代码为404(文件未找到),然后返回该路径或(在404的情况下)返回/ templates / default / filepath 。
通过这种方式,我可以重载修改特定模板,而无需每次都复制整个主题,使开发更容易(我们有3个主要的企业客户,每个都有自己的品牌子主题),不让我跟上每个变化跨多个主题。
如果在AngularJS中有更好的方法可以做到这一点,我也对此持开放态度,在我看来,Nginx将是执行此类操作的最合理的地方,因为它与它的低级集成文件系统。
答案 0 :(得分:1)
<强>解决。强>
不得不在正则表达方面教自己一点,但最后还是让它运转了。
这是有效的:
location ~* ^\/templates\/([^\/\\\]+)(.*)$ {
try_files /templates/$1$2 /templates/default$2 =404;
}
正则表达式解释
try_files然后按顺序尝试每个URL
我通过将这种回退机制转移到服务器而不是我之前在客户端上被迫做的所有无关呼叫,看到了显着的速度提升。