S3静态网站索引文档

问题描述 投票:13回答:5

我正在尝试将我的静态网站上传到我的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

amazon-web-services amazon-s3 amazon
5个回答
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服务器实际上将显示文件的目录列表,其中“索引”页面在“索引”页面实际存在的情况下替换该目录列表。当然,S3没有默认目录列表页面功能。

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

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


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

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


6
投票

我也有这个问题。根据Michael的回答,我开发了这个解决方案:

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

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


4
投票

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

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


1
投票

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


0
投票

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

DefaultRootObject:test_folder / index.html

这样您的cloudfront url https://yourdomain/将返回test_folder / index.html

© www.soinside.com 2019 - 2024. All rights reserved.