1

我有一个使用 NextJS 构建的应用程序。当它在生产中时,它允许尾部斜杠但会破坏一堆其他东西。它给了我以下错误:

无法在“历史”上执行“replaceState”:无法在源为“ https://myapp.com ”和 URL 为“ https://myapp.com// ”的文档中创建 URL 为“https:”的历史状态对象/ '。错误:无法在“历史”上执行“replaceState”:无法在来源为“ https://myapp.com ”和 URL“ https://myapp.com ”的文档中创建 URL 为“https:”的历史状态对象/// '.

只要有斜杠,我就想简单地重定向到正确的地址。

例如,用户类型:myapp.com///,我想将它们重定向到myapp.com,使用 NextJS 路由。这可能吗?我该怎么做呢?

4

1 回答 1

0

你的应用程序首先不应该支持这种斜杠。myapp.com/ 是一回事,myapp.com/// 是另一回事。

AFAIK,谷歌也这么认为,所以如果你在你的 url 中允许多个尾部斜杠,谷歌最终会向你显示一堆重复项(因为每个带有额外 / 的 url 提供的内容与没有它的内容相同)。如果您使用 NextJs,您很可能会关心 SEO。

正确的解决方案是始终在您的网址上强制使用斜杠。如果您正在运行express,您可以在生产中使用连接斜杠来始终强制使用尾部斜杠。

当心,因为这会破坏您的 /static/ 文件夹。您可以使用 express 静态中间件解决此问题:server.use(express.static('static'));.

但是,如果您坚持允许使用多个斜杠,我强烈建议您在服务器端清除它们并显示单个/. 在通过你的中间件之后myapp.com////变得如此。myapp.com/

我会修改connect-slashes之前提到的存储库或创建自己的存储库。/一个简单的正则表达式可以在您的 url 末尾捕获重复项应该可以解决问题。只用一个替换它就可以了。

于 2018-04-16T14:11:51.567 回答