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

Oli*_*erM 5 javascript html5 url-routing angularjs angularjs-routing

我有一个工作的AngularJS(1.3.8)应用程序,它在应用程序上下文"app"下部署为Tomcat中的Web应用程序.

网址如下所示:

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

https://www.myserver.com/app/#/register
Run Code Online (Sandbox Code Playgroud)

路由定义如下:

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

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

$routeProvider.otherwise(
    {redirectTo: 'login'}
);
Run Code Online (Sandbox Code Playgroud)

一切都很好.我现在需要做的是从URL中删除hashbang并使用$ location的HTML5模式.到目前为止,我无法让这个工作.

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

$locationProvider.html5Mode({
    enabled: true,
    requireBase: false
});
Run Code Online (Sandbox Code Playgroud)

现在应用程序URL更改为

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

https://www.myserver.com/app/register
Run Code Online (Sandbox Code Playgroud)

这不起作用.当我请求URL时

https://www.myserver.com/app
Run Code Online (Sandbox Code Playgroud)

角度重定向到

https://www.myserver.com/login
Run Code Online (Sandbox Code Playgroud)

总的来说,这种变化打破了整个路由和资源加载.例如,无法解析路由定义中的部分URL.它们仅在我添加'/ app /'前缀时才起作用.

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

$locationProvider.html5Mode({
    enabled: true
});
Run Code Online (Sandbox Code Playgroud)

和使用

<base href="/app">
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,这没有任何效果.仍然,输入https://www.myserver.com/app会导致AngularJS重定向到https://www.myserver.com/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>
Run Code Online (Sandbox Code Playgroud)

我也遇到了其他问题.例如,如果我在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>
Run Code Online (Sandbox Code Playgroud)

然后突然在加载过程中无法再解析JS和CSS文件.

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

Pan*_*kar 4

我相信你一定有/内线尾随基地href

<base href="/app/">
Run Code Online (Sandbox Code Playgroud)