我知道重复内容(SEO)存在一些问题,但这不是我的项目所关注的问题。
在我的骨干路由器中,我有这个:
routes: {
"": "startOrder",
"order/:orderNumber/:stepName": "getOrder",
"order/:orderNumber/:stepName/": "getOrder"
},
请注意,第二条和第三条路线会导致同样的事情。
问题是如果有人输入一个以“/”字符结尾的URL,我希望它调用一个单独的函数(然后删除斜杠),但这不会发生,它总是与空白匹配路线。然后我会在以后遇到问题,因为URL有一个不应该的斜杠。
我错过了什么吗?
答案 0 :(得分:6)
现在可以在括号内添加斜杠作为路径的可选部分:
var Router = Backbone.Router.extend({
routes: {
'order/:orderNumber/:stepName(/)': 'getOrder'
},
// ...
});
来自pretty comprehensive issue thread on the topic of slashes at the end of Backbone routes。
但是正如该线程中所指出的,为了防止为您的页面记录多个URL,最好删除Apache或其他服务器配置中路径末尾的斜杠。
答案 1 :(得分:0)
它始终与空白路线匹配而不是匹配,因为您可能无法使用Backbone.history.start
启动{ pushState: true }
,因此请按此Backbone.history.start({pushState: true });
如果您希望路线与以/
结尾的任何内容匹配,则可以使用*splat
并以/
结束。这样的事情应该有效:
routes: {
"": "startOrder",
"order/:orderNumber/:stepName": "getOrder",
"order/:orderNumber/:stepName/": "getOrder",
"*dummy/": "endsWithSlash"
}
确保虚拟路线是最后一个。否则,虚拟路线将在您的订单之前与斜线相匹配。
答案 2 :(得分:0)
此路线在内部转换为正则表达式。您可以通过两种情况下的路由方法传递原始正则表达式