我是Backbone和Laravel的新手,所以这可能是一个简单的问题,但我需要我的Backbone路由器匹配初始页面加载时的URL,例如localhost / search / query我想在没有frag标识符(或#hashtags或其他)的情况下这样做。这给了我两个问题:
当我使用Backbone.history.start({ pushState: true })
时,我从Laravel收到404错误。有没有办法为Laravel中的所有URL定义默认(索引)路由,所以我不必列出我可能使用的每个可能的URL组合?
当我不使用pushState: true
时,我的Backbone路由器工作正常,但前提是我没有直接导航到URL。例如,如果我首先转到localhost,那么localhost / #search / example它可以工作,但是如果我直接转到localhost / #search / example,则不会触发搜索路由。我想这可能是因为我只在文档准备就绪时启动了Backbone.history但我不确定如何做到这一点。无论如何,这里有一些代码:
//app.js
window.App = {
Models: {},
Collections: {},
Views: {},
Router: {}
};
window.vent = _.extend({}, Backbone.Events);
// router.js
App.Router = Backbone.Router.extend({
routes: {
'': 'index',
'search/:query': 'search'
},
index: function() {
console.log('the index page');
},
search: function(query) {
console.log('the search page: ' + query);
vent.trigger('router:search', query);
}
});
// setup.js
(function() {
App.cats = new App.Cats();
App.appView = new App.AppView();
App.router = new App.Router;
Backbone.history.start({
pushState: true
});
})();
提前感谢任何建议!
答案 0 :(得分:1)
您可以使用“* actions”定义默认路线:
http://backbonetutorials.com/what-is-a-router/
var AppRouter = Backbone.Router.extend({
routes: {
"*actions": "defaultRoute" // matches http://example.com/#anything-here
}
});
您还可以定义起始根:
Backbone.history.start({pushState: true, root: "/public/search/"})
您必须将请求重定向到index.php
http://www.elcoderino.com/laravel-redirect-redirects-url-to-index-php/
在公共目录中创建.htaccess文件并添加:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>