如何为非 root 基本 url 设置 AngularJS $locationProvider HTML5 模式?

2024-02-09

我有一个正在运行的 AngularJS (1.3.8) 应用程序,它在 Tomcat 中的应用程序上下文“app”下部署为 Web 应用程序。

网址如下所示:

https://www.myserver.com/app/#/login 

https://www.myserver.com/app/#/register

等等。路由定义如下:

$routeProvider.when(
    'login',
    {templateUrl: 'partials/login.html?' + now, controller: 'LoginController'}
);

$routeProvider.when(
    'register',
    {templateUrl: 'partials/register.html?' + now, controller: 'RegistrationController'}
);

$routeProvider.otherwise(
    {redirectTo: 'login'}
);

一切正常。我现在需要做的是从 URL 中删除 hashbangs 并使用 $location 的 HTML5 模式。到目前为止,我无法让它发挥作用。

我的假设是我只需要打电话

$locationProvider.html5Mode({
    enabled: true,
    requireBase: false
});

现在应用程序 URL 更改为

https://www.myserver.com/app/login 

https://www.myserver.com/app/register

这是行不通的。当我请求 URL 时

https://www.myserver.com/app

角度重定向到

https://www.myserver.com/login

总体而言,整个路由和资源加载都因这一更改而被破坏。例如,无法解析路由定义中的部分 URL。它们仅在我添加“/app/”前缀时才起作用。

我尝试使用基本标签,将 $locationProvider 调用更改为

$locationProvider.html5Mode({
    enabled: true
});

并使用

<base href="/app">

令人惊讶的是,这没有任何效果。仍然,进入https://www.myserver.com/app https://www.myserver.com/app导致 AngularJS 重定向到https://www.myserver.com/login https://www.myserver.com/login。网址https://www.myserver.com/app/login https://www.myserver.com/app/login不可用。

这就是我使用基本标签的方式:

<!doctype html>
<html lang="en" ng-app="myApp">
<head>
    <link href="css/mycss" rel="stylesheet" type="text/css">
    ...
    <script src="js/my.js"></script>
    <base href="/app">
</head>
<body class="ng-cloak">
    <ng-view></ng-view>
</body>
</html>

我还遇到了其他问题。例如,如果我更改 HTML 文件内基本标记的位置,如下所示:

<!doctype html>
<html lang="en" ng-app="myApp">
<head>
    <base href="/app">
    <link href="css/mycss" rel="stylesheet" type="text/css">
    ...
    <script src="js/my.js"></script>
</head>
<body class="ng-cloak">
    <ng-view></ng-view>
</body>
</html>

然后突然加载期间 JS 和 CSS 文件无法再解析。

有人可以解释我做错了什么吗?


我相信你一定有尾随/内部底座href

<base href="/app/">
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为非 root 基本 url 设置 AngularJS $locationProvider HTML5 模式? 的相关文章

随机推荐