如果用户输入HTML5 URL,AngularJS返回404,如果重定向到

时间:2015-10-12 01:13:23

标签: javascript angularjs html5

我有以下代码:

app.config(["$routeProvider", "$locationProvider", function($routeProvider, $locationProvider) {

    // use the HTML5 History API
    $locationProvider.html5Mode(true);

    $routeProvider.
        when('/jamView', {
            templateUrl: 'app/jam/jam.view.html',
            controller: 'JamCtrl'
        }).
        otherwise({
            redirectTo: '/jamView'
        });
}]);

...和

$scope.jamActionSelected = function(action) {

    switch(action) {
        case 'Find':
            $location.path('/jamView');
            break;
        default:
            $location.path('/jamView');
    }
}

当浏览器被 $ scope.jamActionSelected 重定向到视图 / jamView 时,页面加载正常,网址变为 localhost:3000 / jamView 应该是的。但是,如果我尝试使用该网址重新加载页面,我会“找不到404”。我认为无论浏览器是通过函数重定向到视图还是通过键入URL它都应该以相同的方式工作。但是,它似乎能够从内部解析视图(由函数调用),但是如果用户想要通过键入该URL来转到该视图则不行。为什么会发生这种情况?我该如何解决?感谢。

1 个答案:

答案 0 :(得分:1)

这与AngularJS无关,必须在服务器端完成。

事实是,当您使用HTML5历史记录API时,它只会模拟您导航到另一个网址,但事实上,您使用的是location和{{1改变了。

当您在栏中键入URL时,浏览器会将该信息发送到服务器,后者会使用相应的内容进行响应。

例如,如果使用Node.js,您可以安装history包,以使您的所有网址都发送相同的内容,然后AngularJS就可以使用该内容。

如果使用ASP.NET MVC,您可以创建一个connect-history-api-fallback来映射所有请求,例如:

Route

您也可以使用其他服务器技术。要找到你的,只需谷歌,例如:

  

使用HTML5历史记录API与[您的服务器技术在这里]。

或者您可以查看this tutorial建议的@Claies,其中显示了几个不同的示例。