Javascript 将Next.js中的URL从大写重定向到小写
我需要将访问者从Javascript 将Next.js中的URL从大写重定向到小写,javascript,reactjs,next.js,http-status-code-301,vercel,Javascript,Reactjs,Next.js,Http Status Code 301,Vercel,我需要将访问者从/Contact重定向到/Contact 当我这样做时,我得到一个无限重定向循环 这就是我所尝试的: //next.config.js 异步重定向(){ 返回[ { 来源:“/联系人”, 目的地:'/contact', 永久性:对 } ] } 以下命令将所有不存在的路径重定向到小写路径。如果找不到路径,它将显示404 import { useEffect } from 'react' import { useRouter } from 'next/router' import E
/Contact
重定向到/Contact
当我这样做时,我得到一个无限重定向循环
这就是我所尝试的:
//next.config.js
异步重定向(){
返回[
{
来源:“/联系人”,
目的地:'/contact',
永久性:对
}
]
}
以下命令将所有不存在的路径重定向到小写路径。如果找不到路径,它将显示404
import { useEffect } from 'react'
import { useRouter } from 'next/router'
import Error from 'next/error'
export default function ResolveRoute() {
const router = useRouter()
useEffect(() => {
const { pathname } = router;
if (pathname !== pathname.toLowerCase()) {
router.push(pathname.toLowerCase())
}
},[router])
return <Error statusCode={404} />
}
从“react”导入{useffect}
从“下一个/路由器”导入{useRouter}
从“下一个/错误”导入错误
导出默认函数ResolveRoute(){
const router=useRouter()
useffect(()=>{
const{pathname}=路由器;
if(路径名!==pathname.toLowerCase()){
router.push(路径名.toLowerCase())
}
},[路由器])
返回
}
将此文件名作为“[route].js”放在pages文件夹的根目录中,将起到全面覆盖的作用(除非该页面存在)。这将重定向到小写。如果已经准备好小写,则表示页面为404。这是预期的。路由不区分大小写/Contact和/或Contact对nextjs具有相同的含义。所以它陷入了无限循环。我可以知道你对/Contact和/Contact的使用情况吗?我是说为什么你需要重定向这种url。@MonzoorTamal那不是真的;路由是区分大小写的;如果没有此重定向,
/Contact
将在/Contact
工作时发出404。重定向不区分大小写。(参见,)。这似乎总是返回404错误页面,这是有意义的,因为返回是无条件的。另请注意,pathname
现在包含params
,因此您需要将.toLowerCase()
应用于路由器.asPath
。最后,将其修改为returnnull
将使用户转到小写路径,但不会解决SEO的任何问题,这将需要301/302重定向。