Next js使用动态路由([[…slug.js]])来处理所有URL,显示404指向主页的链接,但仅在部署时显示



我想要一个单独的动态路由来处理这个应用程序中的所有请求,所以我写了一个名为[[...slug]].js的文件来处理这个请求。我使用getServerSideProps()来加载数据,所以它通常是服务器端呈现的。我没有任何index.js文件。

当它以开发模式在本地运行时,它运行得非常好。当部署(到Vercel(时,除了到/的链接外,所有东西都能正常工作。<Link href={"/"}>…将从服务器请求一个index.json文件,得到404响应并显示错误页面。为什么?

明白了!

我使用getServerSideProps()根据段塞来获取数据。(实际内容来自Sanity.io,查询内容的slug属性是否与URL中的slug或默认页面段符相匹配(。

当使用next dev在本地开发模式下运行应用程序时,加载根("/"(URL时,params.slug参数将为undefined。无论根URL是通过刷新还是导航操作(单击指向/的链接,使用后退按钮(加载的,它都具有相同的值。

但是,当部署站点时,这种行为会发生变化。当页面第一次加载时,params.slug仍然是undefined,但如果它响应客户端导航事件加载,则段塞会突然设置为index。由于我既没有一个包含slugindex的页面,也没有确保在请求index时使用默认的slug,所以我得到了意外的404响应。使用"index"作为触发默认段塞的值之一可以修复它

我不知道这是否是Next JS中的一个bug,但它确实让我困惑了一段时间。

最新更新