【问题标题】:Why doesn’t Amazon S3 automatically serve /foo/index.html when I ask for /foo or /foo/?当我请求 /foo 或 /foo/ 时,为什么 Amazon S3 不自动提供 /foo/index.html?
【发布时间】:2011-09-10 09:46:17
【问题描述】:

我正在考虑使用 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/*"
        }
    ]

}

我的存储桶名称而不是 my-bucket。在“权限”选项卡下,我还授予“所有人”列表功能。

如果我尝试访问my-bucket.s3.amazonaws.com/index.html,我的页面(及其图像、CSS 等)会按预期显示。但是,只需转到 my-bucket.s3.amazonaws.com 或 my-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 会按预期显示页面。)

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

【问题讨论】:

标签: amazon-s3 amazon-web-services


【解决方案1】:

【讨论】:

  • 我发现了问题。我已经在某个时候阅读了您的第二个链接,但我只是回去重新阅读它并意识到我使用了错误的域名。我不希望我的网站托管在my-bucket.s3.amazonaws.com,它只是有点,我应该一直使用my-bucket.s3-website-us-east-1.amazonaws.com。 (您也可以根据需要更改区域。)这种区别现在很明显,我知道要寻找它,但是男孩,这个子域的东西被掩盖了!无论如何,我希望现在其他人能够从我的疏忽中受益:-)
  • 要了解您的真实网址,请转到console.aws.amazon.com 并单击顶部的properties 选项卡,选择您的存储桶,您可以在其中看到您的“端点”网址
  • 已确认。如果您的 CNAME 解析为 S3 存储桶的根 (www.example.com.s3.amazonaws.com),IndexDocumentSupport 根本不起作用。
  • @wukong 将 CNAME 值更改为“bucket.s3-website-eu-west-1.amazonaws.com”,它应该工作
  • @Labu 感谢您的评论! 4 年后,它帮助我让 index.html 在 CNAMED S3 存储桶上工作!
猜你喜欢
  • 2017-12-09
  • 1970-01-01
  • 2017-05-15
  • 2010-12-12
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-23
相关资源
最近更新 更多