我正在使用Laravel和AngularJS开发应用程序。对于AngularJS漂亮的URL,我设置了$ locationProvider.html5Mode(true),它运行正常。但是假设我的网址是http://localhost:8000/demo,如果我刷新页面,我会在compiled.php第7693行中获得NotFoundHttpException:
这是我的角度路线。
function($routeProvider,$locationProvider) {
$locationProvider.html5Mode(true);
$routeProvider.
when('/', {
templateUrl: 'partials/index.html',
controller: 'indexController'
}).
when('/dom',{
templateUrl:'partials/dom.html',
controller:'DomController'
}).
when('/demo',{
templateUrl:'partials/demo.html',
controller:'DemoController'
});
}]);
这是我的laravel的路线。
Route::get('/', function(){
return view('index');
});
我很感激一点帮助。 谢谢!
答案 0 :(得分:5)
这里的问题是,当您刷新页面时,Web服务器将选择http://localhost:8000/demo,并尝试处理该请求。它不知道您希望使用html5路由。所以它会解析请求,说"哦,我应该将它传递给public/index.php
并完成它"。然后public/index.php
将接收它并抛出错误,因为Laravel中不存在该路线。
你需要做的是在Laravel中捕获所有类型的路由,然后让Angular的路由接管。然后,您可以在每个请求上呈现索引视图。关于你如何在Laravel 5中做到这一点,这里有一个很好的答案:How do I catch exceptions / missing pages in Laravel 5?
这是伪代码,无法正常工作,只是为了展示一个例子:
Route::get('*', function() {
return view('index');
});
因此,在每个请求上呈现索引视图,然后让Angular从那里处理路由。