无法使用浏览器网址直接路由我该怎么办?

时间:2018-06-28 07:32:53

标签: angularjs angularjs-routing

我无法使用浏览器中的输入直接路由。 我正在使用$ locationProvider.html5Mode(true); 因此,当我在浏览器中编写网址时,它们将无法在Angular JS中路由。

AppRouting.js

myApp.config(['$routeProvider',
function($routeProvider) {
  $locationProvider.html5Mode(true);
  $routeProvider.
  when('/', {
    templateUrl: 'home.html',
    controller: 'HomeController'
  })
  .when('/login', {
    templateUrl: 'login.html'
  })
  .otherwise({
    redirectTo: '/phones'
  });
}]);

那我该怎么办?

1 个答案:

答案 0 :(得分:1)

您的Web服务器必须能够重定向您的URL才能正常工作。 假设您在“ http://site”上,并且您有一个指向“ http://site/foo/bar”的链接。 当您单击此链接时,您实际上并没有进入该URL,而是进入了“ http://site/index.html#/foo/bar”,angularjs处理了其余部分。

但是,如果直接访问“ http://site/foo/bar”,则Web服务器将尝试在服务器上找到路径“ / foo / bar”(该路径不存在),因此必须将服务器配置为重定向一切都保存到“ index.html”。

使用Apache时,可以将其添加到.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]

# If the requested resource doesn't exist, use index.html
RewriteRule ^ /index.html  

更多信息here