S3静态网站索引文档

时间:2013-11-28 11:26:54

标签: amazon-web-services amazon-s3 amazon

我正在尝试将我的静态网站上传到我的s3存储桶。我设法完成了这个。我创建了my_bucket,然后创建了一个名为test_folder的sub_bucket,并且我上传了所有的css,html,js文件。

现在看起来像这样:

 my_bucket/
  test_folder
    index.html

我能够查看我的index.html,horray! :d。但我的问题是设置索引文档,因为index.html位于sub_bucket:test_folder / index.html当我尝试保存它时,给了我

  

IndexDocument后缀格式不正确

是否可以在sub_bucket中链接index.html?如果有,怎么样?如果没有,是否有另一种方法来实现这一目标?我这里有截图link

7 个答案:

答案 0 :(得分:17)

虽然索引文档经常用于不同的目的,但最初在概念上是每个文件夹中所有文件的“索引”(目录列表或其他内容摘要),因此此配置参数指定索引文档为整个存储桶中的每个文件夹返回,如果文件夹中存在这样的文档 ...这不是整个存储桶的单个配置“事物”。

如果您的尝试配置已被S3接受,则假设存储桶名称为“example.com”,则会产生以下影响:

browser address bar          file (object) actually returned
---------------------------  ------------------------------------
http://example.com           example.com/test/index.html
http://example.com/help      example.com/help/test/index.html
http://example.com/foo/test  example.com/foo/test/test/index.html

这似乎不太可能是你实际想要的。

但是,这就是索引文档的工作方式......它们在概念上与目录层次结构的每个级别的其他内容相关,当然可以是文件的实际列表,也可以是“索引“在更广泛,模糊和一般意义上的任何”页面“,例如您希望访问者在访问您网站上的特定”目录“时看到的目标网页,当然,这在现代网站中通常不会将其概念化为“目录”,而只是简单地称为“页面”。

因此,索引文档必须立即位于相同的/分隔符下,并且在其自己的规范中不能包含其他/

example.com的索引​​文档必须存储在example.com/index.html中(假设“index.html”是您选择的索引文件名) - 它必须存储在索引的“目录”中就像在传统的Web服务器上一样,在某些配置中,Web服务器实际上将显示文件的目录列表,在“index”页面实际存在的情况下,“index”页面替换该目录列表。当然,S3没有默认目录列表页面功能。

http://docs.aws.amazon.com/AmazonS3/latest/dev/IndexDocumentSupport.html

与索引文档相比,错误文档(如果进行配置)是一个全局配置,无论堆在404中的哪个位置都会使用,因此该条目支持斜杠。关于两个条目的性质,AWS控制台提示很清楚,这两个条目的行为是如此不同,以至于它们可以在视觉上更加分离。


你会注意到“sub-bucket”不是你所描述的实际术语,它是一个在其键(路径)中带有分隔符的对象,它给出了嵌套在目录下的外观或文件夹中。

为了清楚起见,我在这个答案中非常随意地使用了“文件夹”和“目录”这两个词,具有传统意义......但是为了技术准确性,我会提到S3对象并没有真正存储在内部“在目录中”的分层时尚。它以这种方式出现,并且出于实际目的,它以这种方式工作;然而,实际情况是/字符虽然接近于对象键中的另一个字符,但由于它作为目录分隔符的常规用途,它作为分隔符得到了一些特殊处理。文件系统,“每个目录中的文件”的数量不会对S3造成任何性能问题,并且当存在大量文件时,不需要以与传统文件系统中所需的相同方式进行管理,因为{{3每个对象的(“路径”)用于其内部存储分区逻辑。

答案 1 :(得分:6)

我也遇到过这个问题。基于Michael的回答,我开发了这个解决方案:

在Amazon S3存储桶属性中,将Index Document:值设置为任意值(我使用'index.htm'并且没有在存储桶的'root'中存在index.htm文件。然后设置错误文档:您希望用户发送到的位置的值(在您的情况下为test_folder / index.html)。

请记住,您网站上的任何404错误消息都将发送到指定的页面。我知道这是一个可怕的工作,但它似乎对我有用。感激地接受任何其他建议!

答案 2 :(得分:4)

我一直在尝试做同样的事情(从s3提供静态)并阅读这篇文章让我意识到你需要将索引文件(例如&#39; index.html&#39;)放在桶中<任何文件夹的外部。

我的索引文档位于模板文件夹中。我读过文档,但是我很沮丧,以至于我无法理解它的真实含义。有时候,真正愚蠢的错误是最难解决的问题。希望这有助于某人。

答案 3 :(得分:1)

尝试在“索引文档”单元格中填写index.html

答案 4 :(得分:1)

最简单的方法应该是使用s3并具有云层,然后在选择存在“文件夹”的存储桶之后将Origin Path设置为test_folder/index.html

答案 5 :(得分:0)

另一种方法是 如果您在S3中使用(或使用)cloudfront,则可以拥有

DefaultRootObject:test_folder / index.html

这样,您的云端URL https://yourdomain/将返回test_folder / index.html

答案 6 :(得分:0)

我意识到我在一年后访问了这个帖子,希望再次做同样的事情。由于这里没有答案提到使用 Custom Origin 而不是 S3 Origin 这是最简单的解决方案,我将在这里发布。这是由 'D. Svanlund' 在这个 AWS thread 中。执行此操作后,您不必将 / 放入浏览器或 s3/cloudfront 设置中。干杯!

在您的 Cloudfront 发行版 S3 Origin 设置选项卡中使用 Custom Origin 而不是使用 Origins and Origin Groups

enter image description here

您必须在 myawesomebucket.s3-website-us-east-1.amazonaws.com 字段中使用您的 s3 存储桶 url ( Origin Domain Name )。您可以从存储桶 Properties 标签中找到您的 S3 存储桶 URL。

enter image description here

也在我的 S3 的 Static website hosting 设置中,我将 index.html 放在 Index document 字段中。