2014-01-30 32 views
0

我使用AngularJS路由和局部变化来建立我的站点的页面结构。我正在使用HTML5模式来避免hashbang。从一个页面导航到另一个页面通过点击链接进行工作,但是当刷新页面或直接输入url时,我得到一个404页面未找到的错误。我该如何纠正这个问题?AngularJS路由和局部变化

这里是精简HTML:

<!DOCTYPE html> 
<html lang="en" ng-app="myApp"> 
<head> 
    <meta charset="utf-8"> 
    <title>site</title> 
    <base href="/"> 
</head> 
<body ng-controller="MyController"> 
    <a href="/home">Site</a> 
    <ul> 
     <li><a href="/home">Home</a></li> 
     <li><a href="/about">About</a></li> 
     <li><a href="/contact">Contact</a></li> 
    </ul> 

    <div ng-view></div> 

    <script src="js/angular.min.js"></script> 
    <script src="js/angular-route.min.js"></script> 
    <script src="js/app.js"></script> 

</body> 
</html> 

这里是我的app.js:

angular.module('myApp', ['ngRoute']) 
    .config(function($locationProvider, $routeProvider) { 
     $locationProvider.html5Mode(true); 
     $routeProvider. 
      when('/home', { templateUrl: 'partials/home.html', }). 
      when('/about', { templateUrl: 'partials/about.html', }). 
      when('/contact', { templateUrl: 'partials/contact.html', }). 
      otherwise({ redirectTo: '/home' }); 
    }); 

function MyController($scope) { 

} 

的部分页面只是发出一行:

home partial 

about partial 

contact partial 

我已经试过这两个IIS7和Apache,每次用相同的结果。

任何援助将不胜感激。感谢您的时间。

回答

2

此行为听起来好像服务器尚未配置为处理您使用html5模式。您的服务器没有资源为路径(如/ home,/ about和/ contact)上的请求提供服务。 (因此,404)您需要配置服务器端重写,以便这些请求将仅用于您的索引页。这样,如果您粘贴在url/about中,服务器就会提供索引页面(它确实存在),并且您的客户端代码负责显示“约”部分。

尽管它是第三方库,但documentation for ui-router对于几种服务器类型(包括Apache)都有很好的示例。