您可能有两个相关的问题:您正在使用推送状态客户端(即使用“真实”URL,而不是 /app#overview 等哈希片段)但(可能)没有在 Backbone 中启用推送状态,并且您的快速配置确实不响应那些客户端路由。
使用推送状态 URL,您仍然必须在服务器端处理这些 URL,因为用户可能会使用这些直接的“客户端”URL 访问您的网站(哈希片段不会发生这种情况,因为哈希部分永远不会发送到服务器)。
因此,要修复服务器端处理,express 允许使用正则表达式作为路由,所以不是:
app.get('/app', function(req, res) {
// Render the app...
});
你可以这样做(见这里):
// The regexp could be a little more restrictive, obviously, but you get the point...
app.get(/^\/app(\/\w+)*$/, function(req, res) {
// Render the app...
});
因此,无论哪个 /app/* URL 用作您的 Web 应用程序的入口点,它都会获得必要的内容。
然后在您的 Backbone 初始化客户端中,您应该使用Backbone.history.start({pushState: true})
启用推送状态来启动历史管理。见这里。