AWS 重定向上托管的 Angular 应用程序在 S3 之前的云前端导致访问被拒绝

标签 angular amazon-web-services amazon-s3 angular-ui-router amazon-cloudfront

我们有一个 Angular 应用程序,它被推送到 AWS S3 存储桶中。我们在 S3 之前有 cloundfront,然后使用 Route53 进行 DNS 更改。 假设我的应用程序可以与 mywebsite.abc.xyz 一起使用,当在浏览器上点击该应用程序时,它会更改为 mywebsite.abc.xyz/sigin。现在,如果我使用 mywebsite.abc.xyz/sigin 地址刷新此地址,则会出现访问被拒绝错误。 但如果我点击 mywebsite.abc.xyz/#/sigin 那么它就可以正常工作。

要删除 #,我遵循 https://zanon.io/posts/angularjs-with-pretty-urls-removing-the-in-amazon-s3 ,并在S3存储桶网站托管中我做了如下更改: enter image description here 在重定向规则中我将代码如下

 <RoutingRules>
  <RoutingRule>
    <Condition>
      <HttpErrorCodeReturnedEquals>403</HttpErrorCodeReturnedEquals>
    </Condition>
    <Redirect>
      <HostName>mywebsite.abc.xyz</HostName>
      <ReplaceKeyPrefixWith>#/</ReplaceKeyPrefixWith>
    </Redirect>
  </RoutingRule>
</RoutingRules>

但是在按照上述步骤更改 Angular 应用程序后,我仍然收到错误,然后我按照https://aws.amazon.com/premiumsupport/knowledge-center/s3-website-cloudfront-error-403/公开了S3存储桶 并添加如下的存储桶策略

{
    "Version": "2008-10-17",
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::mywebsite/*"
        },
        {
            "Sid": "2",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E34ZE2PYIHAABG"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::mywebsite/*"
        }
    ]
}

但是还是同样的错误。我不知道如何解决这个问题。 预期的结果是,即使我点击 mywebsite.abc.xyz/signin/ 那么它也应该可以工作,而它可以与 mywebsite.abc.xyz/#/signin

最佳答案

您需要将自定义错误页面添加到您的 CF 发行版中。

转到您的发行版,错误页面 -> 创建自定义错误响应

403404添加自定义规则,将响应页面路径设置为index.html并且HTTP 响应代码200。保存它。

它应该看起来像这样:

enter image description here

无需公开存储桶,依赖为您生成的策略 CF。

这项工作的原因是,当 CF 尝试访问源并获得 404403 响应时,它将服务器从 index.html 获得的任何内容。 html.

此外,无需配置您的存储桶来为静态网站提供服务,普通存储桶就足够了。

关于AWS 重定向上托管的 Angular 应用程序在 S3 之前的云前端导致访问被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61080735/

相关文章:

amazon-web-services - 如何计算短期文件的 S3 定价?

amazon-web-services - 带有动态(自定义)文本的 AWS 出站 api 调用和带有文本转语音的电话?

amazon-web-services - AWS Cloudformation 从私有(private) S3 AWS4-HMAC-SHA256 下载文件

amazon-web-services - 是否有适用于本地离线开发的 AWS Firehose 的兼容替代方案

angular - 检查存储是否为空 Ionic 4 Storage 插件

javascript - 如何在angular2中使用bootstrap-table的日期格式化程序?

Angular 绑定(bind)到 svg 文本元素获取未知属性错误

Angular 2 定义基本 url

amazon-web-services - 为什么我无法从 cloudwatch 获取 EC2 实例的指标值?

amazon-web-services - WSO2 在代理中使用敏感凭据而不存储它们