我有一个名为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 document
和Error document
,我尝试指定:
build/index.html
然而,如果我试试,我得到:
The IndexDocument Suffix is not well formed
所以我只是将Index document
和Error document
留给index.html
。
但是现在它找不到索引文件:
404 Not Found
Code: NoSuchKey
Message: The specified key does not exist.
Key: index.html
我尝试了here,here和here的建议,但错误仍然存在。
这似乎是一个非常普遍的问题。那么你是如何做到这样的,S3会在文件夹中看到你的index.html
?
答案 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>