当它位于文件夹

时间:2018-02-17 14:39:31

标签: amazon-web-services amazon-s3

我有一个名为mywebsite.com的S3存储桶(非实名)。在存储桶中,我将网站的静态内容放在名为build的文件夹中。

build文件夹ls build/的内容:

asset-manifest.json     index.html              manifest.json           static
favicon.ico             lu1.png                 service-worker.js

我公开了这个桶:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::mywebsite.com/*"
        }
    ]
}

所以我应该可以从这里访问存储桶:

http://mywebsite.com.s3-website.eu-west-2.amazonaws.com(不是真正的网址)

然后,对于Index documentError document,我尝试指定:

build/index.html

然而,如果我试试,我得到:

The IndexDocument Suffix is not well formed

所以我只是将Index documentError document留给index.html

但是现在它找不到索引文件:

404 Not Found
Code: NoSuchKey
Message: The specified key does not exist.
Key: index.html

我尝试了hereherehere的建议,但错误仍然存​​在。

这似乎是一个非常普遍的问题。那么你是如何做到这样的,S3会在文件夹中看到你的index.html

2 个答案:

答案 0 :(得分:3)

索引文档index.html用于每个文件夹。

因此,当您请求http://mywebsite.com.s3-website.eu-west-2.amazonaws.com/时,它将呈现/index.html

如果您请求http://mywebsite.com.s3-website.eu-west-2.amazonaws.com/build/,则会呈现/build/index.html

因此,如果您想拥有该行为,每个文件夹都需要它自己的index.html文件。您不能拥有一个用于所有文件夹的build/index.html

有关错误文档的其他说明

始终相对于根目录呈现错误文档。

因此,如果您请求/some/folder/that/does/not/exist/,则会在/404.html配置为您的错误文档时呈现404.html

答案 1 :(得分:1)

修改 经过一番广泛的测试。我认为先前的规则不适用于“/”(根)路径并创建连续重定向,然后我想出了适合我的规则。

<RoutingRules> 
<RoutingRule>
<Condition>
    <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
</Condition>
<Redirect>
    <ReplaceKeyPrefixWith>build/</ReplaceKeyPrefixWith>
</Redirect> </RoutingRule> </RoutingRules>

您需要自定义重定向规则才能将/index.html重定向到/build/index.html

<RoutingRules>
  <RoutingRule>
   <Condition>
     <KeyPrefixEquals> 
       index.html
     </KeyPrefixEquals>
    </Condition>
  <Redirect>
     <ReplaceKeyPrefixWith>build/index.html</ReplaceKeyPrefixWith></Redirect>
  </RoutingRule>
</RoutingRules>

参考:https://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html#advanced-conditional-redirects