You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NextJS路由中创建带前缀的动态URL

解决Next.js带前缀的动态路由实现问题

直接按你想要的方式来就行,Next.js支持这种带固定前缀的动态路由命名,具体操作如下:

  • 在pages目录下创建blogs-[slug].js文件,这个文件会自动匹配www.example.com/blogs-<slug>格式的URL
  • 同样在pages目录下创建product-[slug].js文件,对应匹配www.example.com/product-<slug>格式的URL

获取动态参数的示例

在这两个文件里,你可以通过Next.js的路由工具获取slug参数,比如客户端组件的写法:

import { useRouter } from 'next/router'

export default function BlogDetail() {
  const router = useRouter()
  // 这里的slug就是URL中blogs-后面的部分
  const { slug } = router.query

  return <div>当前博客的slug是:{slug}</div>
}

如果用服务端渲染或者静态生成,也可以在getServerSideProps或getStaticProps里获取参数:

export async function getServerSideProps(context) {
  const { slug } = context.params
  // 这里可以用slug去获取对应的数据
  return {
    props: { slug }
  }
}

为什么不会出现拦截问题

Next.js的路由匹配是按照文件的命名结构精准匹配的:

  • blogs-[slug].js只会匹配以blogs-开头的动态路径,不会和product-[slug].js的路径冲突
  • 同时也不会影响你已有的blogs.js(对应/blogs)和products.js(对应/products)页面,因为这两个是精确匹配固定路径的路由

之前用catch all路由出现拦截,是因为[...slug].js会匹配所有未被其他路由匹配的路径,而这种带前缀的动态路由属于更精准的匹配规则,优先级比catch all高,所以不会出现互相拦截的情况。

内容的提问来源于stack exchange,提问作者vinay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 12:55:04