我有一个使用NextJS构建的应用程序。当它在生产中时,它允许拖尾斜线,但打破了一堆其他东西。它给了我以下错误:
无法在“历史记录”上执行“replaceState”:无法在原始“https://myapp.com”和网址“https://myapp.com///”的文档中创建包含网址“https:”的历史状态对象。 错误:无法在“历史记录”上执行“replaceState”:无法在原始“https://myapp.com”和网址“https://myapp.com///”的文档中创建包含网址“https:”的历史状态对象。
只要有斜杠,我想简单地重定向到正确的地址。
例如,用户类型:myapp.com///
,我想使用NextJS路由将它们重定向到myapp.com
。这可能吗?我该怎么做?
答案 0 :(得分:0)
你的应用程序首先不应该支持这种尾随斜杠。 myapp.com/是一回事,myapp.com ///是另一回事。
AFAIK,谷歌也是这样看的,所以如果你在你的网址中允许多个斜杠,谷歌最终会向你显示一堆重复(因为每个网址都有一个额外的/提供相同的内容,没有它)。如果您正在使用NextJs,那么您最关心的是SEO。
正确的解决方案是始终在网址上强制使用尾部斜杠。如果您正在运行express
,则可以在生产中使用connect-slashes来始终强制使用尾随斜杠。
请注意,因为这会破坏你的/ static /文件夹。您可以使用快速静态中间件修复此问题:server.use(express.static('static'));
。
但是,如果您坚持允许使用多个斜杠,我强烈建议您在服务器端清除它们并显示单个/
。经过中间件后,myapp.com////
变为myapp.com/
。
我修改之前提到的connect-slashes
回购或创建我自己的回购。在网址末尾捕获重复/
的简单正则表达式应该可以解决问题。只用一个替换它,你就可以了。