小编典典

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

all

我想为我的应用启用 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

完美呈现页面。

刷新时如何启用角度以获取正确的页面?


阅读 66

收藏
2022-07-17

共1个答案

小编典典

角度文档

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

原因是当你第一次访问页面/about(但是,如果您首先加载了根页面和所有 javascript 代码,那么当您导航到/aboutAngular
时,可以在浏览器尝试访问服务器并相应地处理它之前进入那里

2022-07-17