我有一个AWS S3存储桶;让我们称之为example.com
。我已将存储桶配置为用于静态网站托管;例如,存储桶静态网站网址可能是http://example.com.s3-website-us-west-1.amazonaws.com
。我还有一个带有AWS托管证书的CloudFront发行版,因此,https://example.com/
例如,当我访问它时,它会在S3存储桶之外提供内容http://example.com.s3-website-us-west-1.amazonaws.com/
。一切都像梦一样。
在我的网站上,我有一个文件https://example.com/foo.html
已重命名为https://example.com/bar.html
。网络上的其他一些页面可能链接到foo.html
,因此在我的S3存储桶配置中,我为foo.html
对象设置了重定向,如下所示:
<RoutingRules>
<RoutingRule>
<Condition>
<KeyPrefixEquals>foo.html</KeyPrefixEquals>
</Condition>
<Redirect>
<ReplaceKeyWith>bar.html</ReplaceKeyWith>
</Redirect>
</RoutingRule>
</RoutingRules>
当我尝试浏览到时http://example.com.s3-website-us-west-1.amazonaws.com/foo.html
,它会发送HTTP301
永久重定向到bar.html
,因此http://example.com.s3-website-us-west-1.amazonaws.com/bar.html
,正如我期望的那样,我最终到达。
因此,现在如上所述,我将S3存储桶部署到CloudFront分发中。在CloudFront状态显示“已部署”后,我浏览至https://example.com/foo.html
,并期望将其重定向至https://example.com/bar.html
。不好了; 我被引导到http://example.com.s3-website-us-west-1.amazonaws.com/foo.html
insetad!
为什么CloudFront发行版将我重定向回原义的S3存储桶URL?为什么对象没有重定向到正确存储到CloudFront的同一存储桶中的相对对象?
请注意,我知道AWS Cloudfront重定向到S3存储桶的另一个问题,但这似乎不是这个问题的重复问题,因为另一个问题是指整个CloudFront站点临时重定向到整个S3存储桶,而不是单个S3对象重定向失败以将其部署到CloudFront。
首先,CloudFront不会遵循从原点进行的重定向,而是从S3接收响应并将其按原样提供给客户端。S3正在发送此响应,因为在S3重定向规则中,您还需要指定HOST值。
例如:
<HostName>...</HostName>
您可以将主机名定义为名称example.com或https://example.com,在响应中返回的Location标头中使用的主机名。
https://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html
注意:请记住在进行更改和再次测试之前清除缓存,cloudfront还会缓存3xx响应。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句