首次使用Backbone的pushState并且没有100%正常工作,所以请帮助我们。我的需求是:
我无法让所有这三件事都奏效,虽然Nginx重写我可以实现#1和#2。
为达到#1,我做了标准
location / {
root html;
index index.html index.htm index.php;
try_files $uri $uri/ /index.html;
}
重定向到index.html,记录良好。
然而,这不适用于#2。如果我直接转到像www.example.com/store/item123/subitem345这样的嵌套网址,我会收到错误,无法加载我的require.js文件,这些文件正在www.example.com/store/item123/上查找。当然这不对。
我可以使#2使用一些重写规则来删除URL中不需要的部分(/ store / item123部分)。它是否正确?如果是这样,是否有通用的重写来使这项工作?
我永远无法让#3完全发挥作用。每当我进入嵌套路由(例如store / someitem123 / subitem345)时,Backbone会将URL的中间部分附加到后端API调用,这将自然地给出404。所以我会得到(store / someitem123 / php / api / args)而不是所需的(/ php / api / args /)。
必须有一种方法可以覆盖Backbone的同步功能或使用Nginx重写来删除不需要的中间部分(在我的示例中为store / someitem123部分)。 作为参考,我必须在Nginx配置中使用此块以使后端调用完全起作用。但是目前它们只适用于没有深度嵌套URL的路径。
location /php/ {
try_files $uri $uri/ /php/chs_rest.php?$args;
}
答案 0 :(得分:0)
在我看来问题的关键是路由URL重写。根据nginx的Slim文档,您的conf文件不正确。请参阅此处的nginx部分:http://docs.slimframework.com/#Route-URL-Rewriting。
编辑:已更新,以解决以下OP评论。
在您的具体情况下,我可以提出的最佳建议是将Backbone.js应用程序和Slim应用程序拆分为单独的应用程序。
流行的Backbone Wine Cellar教程sample application就是一个很好的例子。该应用程序的Slim部分已有几年历史,但它可以为构建当前应用程序提供极好的参考。
分割应用程序的好处很多,其中最大的可能是每个应用程序都更接近标准的Backbone和Slim应用程序。随着博客文章和文档以及SO问题将直接应用于您的应用程序,您可以随意学习和解决问题的资源将大大增加。未来的维护和持续的开发将变得更加容易。
我相信分割申请的努力会带来极高的投资回报。