我正在将next.js应用程序作为静态导出部署到配置用于静态网站托管的s3存储桶中。
我使用next的build
和export
命令生成out/
目录,然后将其复制到我的s3存储桶中
然后存储桶中包含一些文件,为简单起见,可以说只有index.html
和about.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
发出请求?
一如既往,感谢您的关注,并感谢您的参与。
答案 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)