我正在尝试做一些应该相对简单的事情 – 我想设置一些域和子域来redirect到我们网站的核心域,但是我想把redirect放在Cloudfront上。 除了redirect根path之外,所有东西都可以工作 – 这就是我的XML文件的一部分 – 描述S3存储桶。
S3允许你设置一个全redirect桶 ,如:

testing这个,web端点(brass9-com.s3-website-us-west-1.amazonaws.com)做它应该做的事情 – redirect到brass9.com。 好。
Cloudfront可以让你指向一个S3存储桶,但是它build议你这么做的方式是错误的 – 而不是像名称brass9-com.s3.amazonaws.com那样指向存储桶, 你需要使用上面的Web端点 。 除此之外,您可以将所有内容保留为默认值并获得良好的redirect行为。 所以,像www.brass9.com/portfolio这样的path可以正确地redirect到它应该在的位置。 也不错。
那么一件没有成功的事情就是从简单的www.brass9.comredirect。 而不是让你redirect它让你这个奇怪的结果:
<?xml version="1.0" encoding="UTF-8"?> <ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Name>brass9-com</Name><Prefix></Prefix> <Marker></Marker><MaxKeys>1000</MaxKeys><IsTruncated>false</IsTruncated> </ListBucketResult>
好… 。 所以这并不是完全意外 – 因为没有默认的根对象。 但是,我可能指定什么默认根对象来防止这种行为? 什么是S3redirect对象的名称,如果有的话,我需要指向? 还是有其他一些适当的configuration,或者这只是Amazon的需要解决的Cloudfront和S3如何交互的一个错误?
可以指定一个index.html的默认根对象,但它没有任何帮助 – 它只是改变了问题。 Cloudfronturl改为redirect到主网站上的/index.html,这是一个404(我们不使用index.html文件,它是一个服务器端框架驱动的网站)。 我可以把一个index.html放在服务器上,但是这首先打破了使用Cloudfront的小小的好处。
有一个问题提出了类似的问题,但是由于某种原因,取回了空白的0字节响应 ,而不是我所看到的XML响应。 它不包括有关这个问题或解决scheme的问题。
一篇文章build议你只在裸露的域名和www域名上提供整个站点 。 这与任何用户的书签,您的search排名等,等等,你不应该这样做。
有几个人讨论了在S3和Cloudfront上托pipe一个静态网站而不是redirectscheme,因此是不相关的。
那么,我该如何正确地做到这一点?
Cloudfrontconfiguration的屏幕截图 – 无默认根对象,指向S3原点。 忽略InProgress – 我刚刚打开和closures默认根对象来testing。

和该分配的原始configuration:

作为答复,因为我不能评论 – 从文档http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/DistributionConfigDatatype.html#DistributionConfigDatatype_Elements似乎你可以有一个空白的默认根对象:
如果您不想在创build分发时指定默认根对象,请包含一个空的DefaultRootObject元素。
解决scheme:如问题中所述设置redirect,然后等待S3和CloudFrontcaching时间。 他们可以是4个小时或更多,所以你只需要设置它,然后等待,并希望最好的。
(这是迈克尔的评论的解决scheme,但现在已经很多年了,这真的应该被标记为“已回答”)。