Angular 2和aws,找不到路线

时间:2017-02-06 03:13:30

标签: amazon-web-services angular amazon-s3

尝试在amozon虚拟主机上部署角度2应用程序。 索引页面运行良好,但当我尝试访问/users等其他页面时,我收到了404 not found错误。

我尝试关注此帖Configure Amazon S3 static site with Angular JS ui.router html5Mode(true) on page refresh但未成功。

这是我的应用http://ugram-team-7.s3-website-us-east-1.amazonaws.com/

感谢您的回答。

2 个答案:

答案 0 :(得分:5)

将您的应用路由配置为使用哈希#

const routes: Routes = [
  // routes here
];

@NgModule({
  imports: [
    ... other imports
    RouterModule.forRoot(routes, { useHash: true })  // .../#/users/
  ],
  ...
})
export class SomeModule { }

或配置S3

在您的域的S3控制台的编辑重定向规则部分中,添加以下规则:

<RoutingRules>
  <RoutingRule>
    <Condition>
      <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
    </Condition>
    <Redirect>
      <HostName>domain.com</HostName>
      <ReplaceKeyPrefixWith>#/</ReplaceKeyPrefixWith>
    </Redirect>
  </RoutingRule>
</RoutingRules>

将其放在index.html

<script language="javascript"> 
if (typeof(window.history.pushState) == 'function') { 
  window.history.pushState(null, "Site Name", window.location.hash.substring(2)); 
} else { 
  window.location.hash = window.location.hash.substring(2); 
} 
</script>

答案 1 :(得分:1)

您可以解决问题并仍然使用网址重写。

首先,您不应直接从S3分发您的网站,而是在其前面放置CloudFront分配。

使用以下内容在CloudFront分配上创建自定义错误页面规则:

  • HTTP错误代码:404
  • 错误缓存最小TTL(秒):0
  • 自定义错误响应:是
  • 响应页面路径:/index.html
  • HTTP响应代码:200

请同时take a look at my guide获取详细说明。