使用 CloudFront 重定向但更改 URL

fsi*_*i90 3 amazon-s3 amazon-cloudfront amazon-web-services

我有一个 S3 静态网站,我想将所有请求重定向到索引页面。所以如果你去mysite.com/this_doesnt_exist它应该重定向到mysite.com.

我能够使用自定义错误响应配置此行为,如上图所示,但问题是当我访问时,mysite.com/this_doesnt_exist我看到了索引页面,但地址栏上的 URL 没有更改。我想让它改变。

在此处输入图片说明

我也尝试过在 S3 存储桶上使用重定向规则部分,但在配置 CloudFront 时它似乎不起作用。我有另一个用于测试环境的存储桶,没有配置 CloudFront,它使用以下规则在那里工作:

<RoutingRules>
  <RoutingRule>
    <Condition>
      <HttpErrorCodeReturnedEquals>403</HttpErrorCodeReturnedEquals>
    </Condition>
    <Redirect>
      <ReplaceKeyWith/>
    </Redirect>
  </RoutingRule>
</RoutingRules>
Run Code Online (Sandbox Code Playgroud)

Mic*_*bot 5

将您的源域名从 更改example-bucket.s3.amazonaws.comexample-bucket.s3-website.${region}.amazonaws.com(替换您存储桶的实际区域),以便 S3 重定向规则起作用。CloudFront 中的默认存储桶选择用于存储桶的 REST 终端节点,不会处理重定向规则。

更改<Redirect>重定向规则中的块,以便LocationS3 重定向生成的标头将您发送到正确的主机名(否则它倾向于将浏览器直接重定向到存储桶的网站托管端点)。这www.example.com是指向您的 CloudFront 分配的主机名。

<Redirect>
    <Protocol>https</Protocol>
    <HostName>www.example.com</HostName>
    <ReplaceKeyWith/>
</Redirect>
Run Code Online (Sandbox Code Playgroud)

删除自定义错误设置。

/*.创建 CloudFront 失效。

等待一切传播,然后重新测试。

  • 需要使用 404 而不是 403 是一个危险信号。它表明您已允许公共访问存储桶中的对象 *listings*,因此您可能需要检查一下。如果您的内容是公开的,则公开下载很好,但公开列表可能比您想透露的要多。S3 安全模型设计的一个怪癖意味着当对象不存在*并且*访问用户(在这种情况下为匿名)没有列出对象的权限时,404 变为 403。 (2认同)