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

Next.js 13.4:如何在Middleware中获取动态路由参数

在Next.js Middleware中获取动态路由分段值的方法

动态路由的分段(比如/app/[slug]里的slug)属于路径的一部分,并非查询参数,所以你无法通过req.nextUrl.searchParams获取到它——searchParams仅对应URL中?后的参数。下面是两种可行的获取方式:

方法一:使用URL Pattern API

利用浏览器原生的URL Pattern API(Next.js已支持),可以精准匹配动态路由结构并提取分段值:

import { NextRequest } from 'next/server';

export async function middleware(req: NextRequest) {
  // 创建匹配/app/[slug]路由的模式
  const dynamicRoutePattern = new URLPattern({ pathname: '/app/:slug' });
  const matchResult = dynamicRoutePattern.exec(req.nextUrl);

  if (matchResult) {
    const slugValue = matchResult.pathname.groups.slug;
    console.log('当前slug值:', slugValue);
    // 这里可根据slug是否存在执行对应逻辑
  } else {
    // 匹配非动态路由,比如/app/about、/app/faq
    console.log('当前为非动态路由');
  }
}

方法二:正则表达式匹配路径

如果你的路由结构固定,也可以用正则直接匹配pathname来提取分段:

import { NextRequest } from 'next/server';

export async function middleware(req: NextRequest) {
  const pathname = req.nextUrl.pathname;
  // 匹配/app/后接单个分段的路径
  const slugMatch = pathname.match(/^\/app\/([^\/]+)$/);

  if (slugMatch) {
    const slugValue = slugMatch[1];
    console.log('当前slug值:', slugValue);
  } else {
    console.log('当前为非动态路由');
  }
}

额外说明

如果需要限制Middleware仅在特定路由触发,可以在next.config.js中配置matcher,缩小触发范围:

module.exports = {
  middleware: {
    matcher: ['/app/:slug*', '/app/about', '/app/faq']
  }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:35:14