当我要求/ foo或/ foo /时,为什么Amazon S3不会自动提供/foo/index.html?

bde*_*ham 22 amazon-s3 amazon-web-services

我正在考虑使用Amazon S3为我的静态站点提供服务.我创建了一个存储桶并上传了我的文件; 在AWS管理控制台的"网站"标签下,我选中了"已启用",并index.html在"索引文档"字段中输入.我有以下存储桶策略:

{
    "Version": "2008-10-17",
    "Id": "924a2348-de0e-43aa-bb06-83adbcd1db22",
    "Statement": [
        {
            "Sid": "PublicReadForGetBucketObjects",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::my-bucket/*"
        }
    ]

}
Run Code Online (Sandbox Code Playgroud)

我有我的桶名而不是my-bucket.在"权限"选项卡下,我还授予"所有人"列表功能.

如果我尝试访问my-bucket.s3.amazonaws.com/index.html我的页面(及其图像,CSS等)按预期显示.但是,只是转到my-bucket.s3.amazonaws.commy-bucket.s3.amazonaws.com/给出一个目录列表XML文件而不是显示页面.如果我试图去,my-bucket.s3.amazonaws.com/subdirectory我得到一个错误(在XML中)说"指定的密钥不存在."最奇怪的是,如果我尝试去my-bucket.s3.amazonaws.com/subdirectory/(带斜杠),没有页面加载,但我的浏览器下载一个空文件命名download.(再次,my-bucket.s3.amazonaws.com/subdirectory/index.html按预期显示页面.)

我在这里做错了吗?index.html当请求目录名时,如何让S3显示文件?

Ter*_*zki 15

看起来您需要配置根(索引)文档:

http://docs.amazonwebservices.com/AmazonS3/latest/dev/IndexDocumentSupport.html

http://aws.typepad.com/aws/2011/02/host-your-static-website-on-amazon-s3.html

  • 我发现了这个问题.我已经在某个时候阅读了你的第二个链接,但我只是回过头来重新阅读它并意识到我使用了错误的域名.而不是期望我的网站托管在`my-bucket.s3.amazonaws.com`,它只是那种,我本应该使用`my-bucket.s3-website-us-east-1.amazonaws. com`.(你也可以在适当的时候改变这个区域.)这个区别很明显,我知道要找它,但是男孩,这个子域名被掩盖了!无论如何,我希望现在其他人能够从我的疏忽中受益:-) (29认同)
  • 证实.如果您的CNAME解析为S3存储桶的根目录(www.example.com.s3.amazonaws.com),则"IndexDocumentSupport"根本不起作用. (4认同)
  • 要了解您的真实网址,请转到`console.aws.amazon.com` 并单击顶部的`properties` 选项卡,选择您的存储桶,然后您就可以看到您的“端点”网址 (2认同)
  • @wukong将CNAME值更改为"_bucket_.s3 - **website** - eu-west-1.amazonaws.com",它应该可以正常工作 (2认同)
  • 请注意,如果您使用 CloudFront 分发静态 S3 站点,您还需要为分发设置默认根对象,否则您将遇到相同的问题。 (2认同)
  • @Labu 感谢您的评论!4 年后,它帮助我让 index.html 在 CNAMED S3 存储桶上运行! (2认同)