虽然经常用于不同的目的,但索引文档最初在概念上旨在成为每个文件夹中所有文件的“索引”(目录列表或其他内容摘要),因此此配置参数指定索引文档为整个存储桶中的每个文件夹返回,如果文件夹中存在这样的文档...这不是整个存储桶的单一配置“事物”。
如果您尝试的配置已被 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 控制台提示对这两个条目的性质进行了简单的提示,它们的行为如此不同,因此可以说它们应该在视觉上更加分开。
您会注意到,对于您所描述的内容,“子存储桶”不是一个实际术语,它是一个在其键(路径)中带有分隔符的对象,它看起来像是嵌套在目录下或文件夹。
为了清楚起见,我在整个答案中非常随意地使用了“文件夹”和“目录”这两个词,具有传统含义......但为了技术准确性,我会提到 S3 对象并没有真正存储在内部“在目录中”的分层方式。它以这种方式出现,并且出于实际目的,它以这种方式工作;然而,/ 字符实际上是这种情况,虽然它几乎只是对象键中的另一个字符,尽管由于它通常用作目录分隔符,因此它作为分隔符得到了一些特殊处理。与一些更传统的文件系统不同, “每个目录中的文件数”不会对 S3 造成任何性能问题,并且不需要像存在大量文件时以传统文件系统中所需的方式进行管理,因为 S3 internally hashes the key (" path") 每个对象的内部存储分区逻辑。