当有斜杠

时间:2018-04-13 16:12:31

标签: javascript reactjs nextjs

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

  

无法在“历史记录”上执行“replaceState”:无法在原始“https://myapp.com”和网址“https://myapp.com///”的文档中创建包含网址“https:”的历史状态对象。   错误:无法在“历史记录”上执行“replaceState”:无法在原始“https://myapp.com”和网址“https://myapp.com///”的文档中创建包含网址“https:”的历史状态对象。

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

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

1 个答案:

答案 0 :(得分:0)

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

AFAIK,谷歌也是这样看的,所以如果你在你的网址中允许多个斜杠,谷歌最终会向你显示一堆重复(因为每个网址都有一个额外的/提供相同的内容,没有它)。如果您正在使用NextJs,那么您最关心的是SEO。

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

请注意,因为这会破坏你的/ static /文件夹。您可以使用快速静态中间件修复此问题:server.use(express.static('static'));

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

我修改之前提到的connect-slashes回购或创建我自己的回购。在网址末尾捕获重复/的简单正则表达式应该可以解决问题。只用一个替换它,你就可以了。