当前位置: 首页 > 知识库问答 >
问题:

使用S3、CloudFront和Origin路径的静态网站托管的子文件夹重定向问题

闻人昊昊
2023-03-14

我有一些困难设置静态网站托管使用亚马逊S3和CloudFront。

我们有许多网站,我们希望作为静态网站使用Amazon S3+Cloudfront,我们更喜欢在一个单一的S3桶中托管它们。

我已经启用了此bucket的静态网站托管,默认文档设置为'index.html'

我已经创建了一个Cloudfront web发行版来服务于这个单一的网站,默认根对象设置为'index.html'。

该发行版有一个自定义来源,指向静态网站url'bucket-name.s3-website-us-east-1.amazonaws.com',来源路径设置为'/websites/website1'

我是不是漏掉了什么?只使用Cloudfront和S3这是不可能的设置吗?

共有1个答案

翟功
2023-03-14

我最终通过使用S3 bucket的路由规则解决了这个问题

https://docs.aws.amazon.com/amazons3/latest/dev/how-to-page-redirect.html

问题是省略尾随斜杠引起的重定向会导致Orgigin路径被追加到完整的S3 bucket路径(“example.cloudfront.net/about”重定向到“example.cloudfront.net/websites/website1/websites/website1/about/”失败,因为路径无效)

缺点是在添加新发行版时需要记住修改路由规则

<RoutingRules>
    <RoutingRule>
        <Condition>
            <KeyPrefixEquals>websites/website1/websites/website1/</KeyPrefixEquals>
        </Condition>
        <Redirect>
            <HostName>example.cloudfront.net</HostName>
            <ReplaceKeyPrefixWith></ReplaceKeyPrefixWith>
        </Redirect>
    </RoutingRule>
</RoutingRules>
 类似资料:
  • AWS S3网站托管指南建议以一种我不清楚的方式建立一个子域 为什么AWS建议为(www)子域和子域的S3存储桶设置一个A记录(别名),然后再重定向到另一个S3存储库? 设置CNAME DNS记录而不是这种双重重定向不是更好吗?

  • 我试图将一个静态网站安装到S3中,使用自定义域,并使用CloudFront处理HTTPS。 问题是根路径可以正常工作,而子路径不能正常工作。 显然,所有这些都与默认根对象有关,我在这两个地方都将其配置为index.html。 null 即使Index.html的副本出现在安装目录中,CloudFront也不会返回默认的根对象。 如果将发行版配置为允许CloudFront支持的所有HTTP方法,则默

  • 我正在尝试自动旋转一个具有S3起源的CloudFront发行版。我希望将源设置为S3网站URL,例如。因此,我认为我的Cloudformation模板应该如下所示: 但是,这会产生以下错误: 参数Origin DomainName未引用有效的S3 bucket。 这是真的,所以我可以指定S3 bucket。但我希望我的起源是网站endpoint。我的非自动化解决方案是使用S3 RESTendpoi

  • 如何在CloudFront上为静态托管的网站上的子目录设置默认根对象?具体地说,我希望每当用户请求时,就提供。注意,这是为了交付一个保存在S3桶中的静态网站。此外,我希望使用一个origin访问标识来限制对S3 bucket的访问,仅允许CloudFront访问。 因此,尽管Cloudfront允许我们指定默认根对象,但这只适用于,而不适用于。为了绕开这个困难,我们可以将起源域名改为指向S3给出的

  • 我在AWS/S3上与其他域名注册商建立了许多静态站点;但是,google域给我带来了一些问题。 我采取的步骤: -在S3/AWS上: > 已创建桶domainname.org 通过添加index.html启用静态网站托管 已将index.html和相关文档上载到存储桶 创建桶www.domainname.org以重定向到桶domainname.org 为domainname.org创建了桶策略,如

  • 我正在使用S3托管一个javascript应用程序,该应用程序将使用HTML5 pushStates。问题是,如果用户为任何URL添加书签,它将无法解析为任何内容。我需要的是接收所有url请求并在S3桶中提供根index.html的能力,而不是仅仅进行完全重定向。那么我的javascript应用程序就可以解析URL并提供适当的页面。 有没有办法告诉S3为所有URL请求提供index.html服务,