问题描述
在将HUGO静态网站上传到AWS S3桶中后,发现无法通过URL访问资源。例如,https://www.example.com
可以正常访问,但无法访问https://www.example.com/posts/
。用户希望能够自动将链接重定向到对应的html文件,而不必每次手动重定向。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
CloudFront实际上没有这个功能。你可以通过设置DefaultRootObject
将根对象https://www.example.com/
重定向到https://www.example.com/index.html
,但对于子目录(如https://www.example.com/posts/
)没有类似的功能。
但是,你可以使用Lambda@Edge或CloudFront Functions在CloudFront上运行任意代码,因此我们可以自己添加此功能。通过“origin request”触发器,我们可以重写请求到S3,将/posts/
更改为/posts/index.html
。这个链接提供了一些很好的处理路径的示例,适用于Hugo。亚马逊文档中有一个示例,展示了如何使用CloudFront Functions实现相同的功能。
另一种选择是在配置中启用uglyurls
,这样站点内的所有链接都会在其中硬编码index.html
。
方案2
这是一个不错的想法,但正如@Alexandre在上面所说,这个答案解决了问题https://stackoverflow.com/questions/49082709/redirect-to-index-html-for-s3-subfolder。这真是让人头疼的问题,一个直观的功能需要Lambda Edge!?