如何使用CloudFront在S3之前的S3托pipe网站的域上启用redirect?

我试图让redirect工作在一个S3托pipe的静态网站的域名。 也就是说,如果我指向mydomain.com/foo,我希望它redirect到mydomain.com; 这应该基本上镜像mydomain.com.s3-website-us-east-1.amazonaws.com/foo被redirect到mydomain.com.s3-website-us-east-1.amazonaws.com。 现在发生的事情是mydomain.com/foo被redirect到mydomain.com.s3-website-us-east-1.amazonaws.com/。

我有一个与Amazon文档一致命名的S3存储桶,以确保资源适当地redirect。 我还将CloudFrontconfiguration为指向S3网站端点(mydomain.com.s3-website-us-east-1.amazonaws.com)以及在“备用域名(CNAME)”中设置的域。

在Route53中,我创build了一条Alogging指向CloudFront的d123456789.cloudfront.net域名。 所以,现在去mydomain.com工作得很好; 然而,试图去一个会导致redirect的资源让我回到丑陋的S3名称。

我怎样才能保持CloudFront的混合,但得到友好的redirect行为,使我的域名前面和中心?

编辑:例如,我试图只redirect/上传到/; 以下是我如何设置的: S3重定向截图

编辑2:澄清,redirectfoo.com/update到foo.com/index.html是最小的情况; 理想情况下,我希望能够将foo.com/下的任何资源redirect到foo.com/index.html,这就是我追求redirect规则解决scheme的原因。

您需要在路由规则中指定目标主机名和协议。 这迫使Location:有正确的(所需的)主机名。

redirect几乎所有东西的最简单方法是创build一个匹配403 Forbidden的路由规则(因为S3默认情况下会拒绝所有的东西)并指出你想要的东西。

 <RoutingRules> <RoutingRule> <Condition> <HttpErrorCodeReturnedEquals>403</HttpErrorCodeReturnedEquals> </Condition> <Redirect> <Protocol>https</Protocol> <HostName>target.example.com</HostName> <ReplaceKeyWith></ReplaceKeyWith> </Redirect> </RoutingRule> </RoutingRules> 

所有请求都应该redirect到https://target.example.com/ ,除非请求的URL与现有对象与public-read ACL或索引文档匹配。

如果这不符合预期,您也可以将其更改为在404上匹配,但不要这样做。 如果404工作,这意味着您的存储桶策略太宽松,允许未经身份validation的用户列出您的存储桶内容…所以,不要改变这一点 – 修正您的政策。 在这里使用403。

您不需要为此使用高级redirect路由规则。 只需上传一个带有redirect名称的零字节对象,并在元数据下设置一个redirect。 这是在这里logging 。

一个问题是,您必须使用下面的URL格式或在实际域中访问它,如本支持案例 (需要AWSlogin)中所述。

 http://BUCKET_NAME.s3-website-ap-southeast-2.amazonaws.com/index.html 

这可以直接使用S3进行工作,有或没有Route53被用于DNS。

更新 :我已经使用S3和CloudFront做了一个这样的例子,我会留几天,但是我会提供截图来展示我做了什么,所以它可以作为一个永久的例子。 你可以尝试在这里redirect – redir.html文件应该redirect到index.html。

在通过CloudFront访问时,此function正常工作,但您必须手动input源到CF,而不是使用下拉列表。 信息在这里 。 这是因为只有网站端点支持redirect – 这里的信息 。

这是我在S3上设置redirect的方式 在这里输入图像说明

这是一个redirect到外部网站的例子( 链接 ) 在这里输入图像说明

以下是我如何使用cloudfront的cname设置CloudFlare 在这里输入图像说明