在html5Mode中使用Laravel 4和AngularJS的路由问题

时间:2015-06-07 16:15:39

标签: angularjs laravel-4 angularjs-routing

我正在创建一个RESTful应用程序,Laravel 4作为后端,AngularJS作为前端。我想使用Angular的路由。

laravel中的

routes.php设置如下(有一个组/ api,但没有必要)

Route::any('{all}', function ($uri) {
    return View::make('index');
})->where('all', '.*');

我在Angular的路线是

$routeProvider.
    when('/', {
        templateUrl: 'views/test.html',
        controller: 'homeCtrl'
    }).
    when('/test', {
        templateUrl: 'views/test.html',
        controller: 'homeCtrl'
    }).
    when('/test/:id', {
        templateUrl: 'views/test.html',
        controller: 'homeCtrl'
    }).
    otherwise({
        redirectTo: '/'
    });
 $locationProvider.html5Mode(true);

我在<base href="/"/>

中定义了index.php

xampp中的DocumentRoot位于DocumentRoot "C:/xampp/htdocs/laravel/public"(所以Laravel中的公用文件夹)

当我点击localhost/test时,一切正常。但是当我尝试访问localhost/test/1时,所有内容都会从Laravel视图加载为index.php文件,如下所示。

enter image description here

有人解决这个问题吗?我应该在routes.php创建正则表达式,它将保存每个(.js,.jpg,...)扩展名(我认为这不是一个好主意)?或者我应该更改.htaccess文件?

1 个答案:

答案 0 :(得分:0)

我在这个question中找到了一个解决方案,并将Laravel中丢失的路线更改为一个,一切都很好。

App::missing(function ($exception) {
    return Redirect::to('/#/' . Request::path());
});

问题是

  • html5Mode中的Angular需要#作为前缀。
  • Laravel正在返回子页面中的主页,包括我在问题中显示的资产。