9

我已经完成了$locationProvider.html5Mode(true);,但它不起作用。每当我访问http://example.com它时,它都会转到http://example.com/#!/. 代码在这里给出:

var myApp = angular.module('myApp', ['ui.router', 'ui.bootstrap']);

myApp.config(['$qProvider', function ($qProvider) {
    $qProvider.errorOnUnhandledRejections(false);
}]);

myApp.config(function($stateProvider, $urlRouterProvider,$locationProvider) {
    // For any unmatched url, redirect to EXTRANET home page
    $urlRouterProvider.otherwise('/');
    // Now set up the states
    $stateProvider
    .state('listrole', {
    url: "/list-role",
    views: {
      'main-content': {
        templateUrl: rootUrl+ 'views/main.html',
        controller: 'rolesCtrl'
      }
    }
    })
    $locationProvider.hashPrefix('');
    $locationProvider.html5Mode(true);
});

我也添加了更新$locationProvider.hashPrefix('');,但没有区别。另外让我告诉你,我在地址栏中输入地址并按回车。我做得对吗?浏览器如何发现它不需要从服务器刷新?

更新#2

理想情况下,我希望 URL ashttp://example.comhttp://example.com/#!/list-roleto http://example.com/list-role。现在http://example.com/list-role给 404

更新#3

如果有帮助,我正在使用 nginx 代理。

更新#4

已擦除缓存。现在我可以看到http://example.com而不是http://example.com/#!但仍然http://example.com/list-role给出 404

4

6 回答 6

24

如果要删除此前缀,请将此代码添加到您的配置中:

appModule.config(['$locationProvider', function($locationProvider) {
  $locationProvider.hashPrefix('');
}]);

在此处获取更多信息。


更新

如果你想删除整个前缀(#而不仅仅是!),你可以试试这个解决方案

1) 激活 HTML5 模式并删除!模块配置中的前缀

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

/2)然后在<head>你的 index.html 上设置 base

<head>
    ...
    <base href="/">
</head>
于 2017-01-04T10:15:55.753 回答
2

添加到您的 html 文件中<head> <base href="/foldername/"> </head>

这个是给你的 app.js$locationProvider.html5Mode(true);

.htaccess如果您没有,这是用于创建文件。

RewriteEngine On 
# If an existing asset or directory is requested go to it as it is
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d  
RewriteRule ^ - [L]
RewriteRule ^ /foldername/
于 2017-09-11T08:59:27.790 回答
1

下面的代码将删除 URL 中的感叹号 (!)

$locationProvider.hashPrefix('');

或者使用 yeoman 设置转到 AngularJS 项目的路由问题

它对我有用

于 2017-01-04T10:02:49.053 回答
1

将以下内容添加到 app.js

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

  $locationProvider.hashPrefix('');

}]);
于 2018-01-02T04:25:33.460 回答
0

如果您在带有 AngularJS 的 MVC 的 .NET 堆栈中,那么您必须执行以下操作才能从 url 中删除“#”:

1.在您的_Layout页面中设置您的基本href:

 <head> <base href="/"> </head>

2.然后,在您的 Angular 应用程序配置中添加以下内容:

$locationProvider.html5Mode(true)
$locationProvider.hashPrefix("!");
于 2017-01-04T10:00:31.170 回答
0
$locationProvider.hashPrefix('');

请检查这个问题:AngularJS ui-router application has /#!/ in the URL

于 2017-01-04T10:01:15.723 回答