You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置S3子文件夹实现无index.html路径访问(自定义域名)

最优实现方案:S3子路径自动加载对应目录的index.html

这是个很常见的S3静态网站托管场景需求,我来给你捋捋两种最优实现方式,你可以根据自己的场景选择:

方案1:仅用S3静态网站托管(无CloudFront)

这种方式成本最低,不需要额外服务,适合小型静态站点:

  1. 确认基础配置:确保你的S3存储桶已经开启了静态网站托管,全局索引文档设置为index.html(这应该已经完成了,因为根目录的index.html能正常访问)。

  2. 配置S3重定向规则
    S3默认只会在用户访问带末尾斜杠的路径(比如/old/)时,自动加载该目录下的index.html;但如果用户输入/old(不带斜杠),S3会把它当成一个文件去查找,找不到就返回403。所以我们需要配置重定向规则,把不带斜杠的请求转成带斜杠的:

    登录AWS控制台,进入你的S3存储桶 → 「属性」标签 → 拉到「静态网站托管」部分 → 编辑「重定向规则」,粘贴以下JSON配置:

    [
        {
            "Condition": {
                "KeyPrefixEquals": "old",
                "HttpErrorCodeReturnedEquals": "404"
            },
            "Redirect": {
                "HostName": "example.com",
                "HttpRedirectCode": "301",
                "Protocol": "https",
                "ReplaceKeyPrefixWith": "old/"
            }
        },
        {
            "Condition": {
                "KeyPrefixEquals": "new",
                "HttpErrorCodeReturnedEquals": "404"
            },
            "Redirect": {
                "HostName": "example.com",
                "HttpRedirectCode": "301",
                "Protocol": "https",
                "ReplaceKeyPrefixWith": "new/"
            }
        }
    ]
    

    这个规则的逻辑是:当用户访问https://example.com/old时,S3找不到名为old的文件(返回404),就触发301永久重定向到https://example.com/old/,此时S3就会自动加载old/index.html了。301重定向对SEO也更友好。

  3. 验证权限:确保old/index.html和new/index.html文件的权限是公开可读的,或者通过桶策略允许公众访问这些路径。

方案2:结合CloudFront(推荐生产环境使用)

如果你的站点是生产环境,或者需要缓存、更灵活的HTTPS配置、自定义域名管理,推荐用CloudFront配合S3:

  1. 基础配置:已经把CloudFront分配指向你的S3静态网站托管端点(或者直接指向S3桶,注意配置Origin Access Control避免公开桶)。

  2. 配置CloudFront行为重定向

    • 进入CloudFront控制台,打开你的分配 → 「行为」标签 → 创建新行为:
      • 路径模式填/old,把「重定向到另一个路径」勾选上,目标路径填/old/,重定向类型选301永久重定向。
      • 重复上述步骤,创建路径模式为/new的行为,重定向到/new/。
    • 这样用户访问/old时,CloudFront直接重定向到/old/,S3自动加载对应目录的index.html。
  3. 进阶优化(可选):如果需要更灵活的路径处理(比如支持更深层次的子路径),可以用Lambda@Edge编写一个简单的重定向函数,统一处理所有不带斜杠的目录请求。

关键注意点

  • 确保S3桶里确实存在old/和new/对应的文件结构(S3的目录是虚拟的,只要old/index.html和new/index.html文件路径正确即可)。
  • 如果用自定义域名,确认DNS解析已经正确指向S3端点或者CloudFront分配。

内容的提问来源于stack exchange,提问作者g3blv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:11:33