小编典典

使用AngularJS HTML5模式重新加载页面会给出错误的GET请求

html

我想为我的应用启用HTML5模式。我已经把下面的代码的配置:

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

    $locationProvider.html5Mode(true);
    $locationProvider.hashPrefix = '!';

    $routeProvider.when('/', {
        templateUrl: '/views/index.html',
        controller: 'indexCtrl'
    });
    $routeProvider.when('/about',{
        templateUrl: '/views/about.html',
        controller: 'AboutCtrl'
    });

如您所见,我使用,$locationProvider.html5mode并且更改了的所有链接ng-href以排除/#/

问题

目前,我可以转到localhost:9000/并查看索引页面,然后浏览至其他页面,例如localhost:9000/about

但是,刷新localhost:9000/about页面时会出现问题。我得到以下输出:Cannot GET /about

如果我看网络通话:

Request URL:localhost:9000/about
Request Method:GET

如果我先转到localhost:9000/然后单击导航到的按钮,则会/about得到:

Request URL:http://localhost:9000/views/about.html

完美呈现页面。

刷新时如何启用angular以获得正确的页面?


阅读 391

收藏
2020-05-10

共1个答案

小编典典

从角度文档

服务器端
使用此模式需要在服务器端重写URL,基本上,您必须重写所有指向应用程序入口点的链接(例如index.html)

这样做的原因是,当您第一次访问页面(/about)时(例如刷新后),浏览器无法得知这不是真实的URL,因此会继续进行加载。但是,如果您先加载了根页面以及所有的javascript代码,那么当您导航到/aboutAngular时,可以在浏览器尝试访问服务器并进行相应处理之前进入Angular。

2020-05-10