next.js导出静态-S3-重新加载页面时路由失败

时间:2019-08-10 01:05:18

标签: amazon-web-services amazon-s3 next.js

我正在将next.js应用程序作为静态导出部署到配置用于静态网站托管的s3存储桶中。

我使用next的buildexport命令生成out/目录,然后将其复制到我的s3存储桶中

然后存储桶中包含一些文件,为简单起见,可以说只有index.htmlabout.html

问题是,当用户通过index.html击中www.website.com然后导航到www.website.com/about时一切正常,但是重新加载www.website.com/about当然会失败。

www.website.com/about.html找到正确的资产来渲染网站

有没有一种方法可以导出静态的next.js应用程序,使其在s3上托管并向/about代理/about.html发出请求?

一如既往,感谢您的关注,并感谢您的参与。

3 个答案:

答案 0 :(得分:3)

在项目根目录下的 next.config.js 文件中。

module.exports = {
    trailingSlash: true,
}

现在您可以在 about.jsx 目录中创建您的页面(例如 pages),当您运行index.html 命令。

试一试,在这里工作得很好。

答案 1 :(得分:2)

受这个要点启发,我到目前为止已经找到了最好的解决方案: https://gist.github.com/rbalicki2/30e8ee5fb5bc2018923a06c5ea5e3ea5

基本上,在将构建部署到s3存储桶时,您可以简单地将.html文件重命名为没有.html后缀,例如:www.bucket.com/about.html-> www.bucket.com/about,现在SSR和CSR路由均按预期工作。

尽管没有后缀,但生成的文件仍具有Content-Type: text/html,我不知道这是否有问题。

答案 2 :(得分:1)

RewriteRule ^([^。] +)$ $ 1.html [NC,L] 工作正常(y)