我有一个 S3 静态网站,我想将所有请求重定向到索引页。因此,如果您访问,mysite.com/this_doesnt_exist
它应该重定向到mysite.com
。
我能够使用自定义错误响应就像上图那样,但问题是,当我访问时,mysite.com/this_doesnt_exist
我看到了索引页,但地址栏上的 URL 并没有改变。我希望它改变。
我也尝试过使用重定向规则部分在 S3 bucket 上,但当配置了 CloudFront 时它似乎不起作用。我有另一个用于测试环境的 bucket,没有配置 CloudFront,它在那里使用以下规则工作:
<RoutingRules>
<RoutingRule>
<Condition>
<HttpErrorCodeReturnedEquals>403</HttpErrorCodeReturnedEquals>
</Condition>
<Redirect>
<ReplaceKeyWith/>
</Redirect>
</RoutingRule>
</RoutingRules>
答案1
将您的源域名从 更改example-bucket.s3.amazonaws.com
为example-bucket.s3-website.${region}.amazonaws.com
(替换您的存储桶的实际区域),以便 S3 重定向规则可以正常工作。CloudFront 中的默认存储桶选择适用于存储桶的 REST 端点,不会处理重定向规则。
更改<Redirect>
重定向规则中的块,以便Location
S3 重定向生成的标头将您发送到正确的主机名(否则它会倾向于将浏览器直接重定向到存储桶的网站托管端点)。这里www.example.com
是指向您的 CloudFront 分发的主机名。
<Redirect>
<Protocol>https</Protocol>
<HostName>www.example.com</HostName>
<ReplaceKeyWith/>
</Redirect>
删除自定义错误设置。
为 创建 CloudFront 无效化/*
。
等待一切传播,然后重新测试。