概览Edge Middleware 读取 UA 判定设备类型,并重写到对应路由组(如 `(mobile)` 与 `(desktop)`)。以 Cookie 固定用户选择,避免跨页切换抖动并兼顾 SEO。middleware.tsimport { NextResponse } from 'next/server' import type { NextRequest } from 'next/server' function isMobile(ua: string) { return /(Android|iPhone|iPad|Mobile)/i.test(ua) } export function middleware(req: NextRequest) { const url = req.nextUrl.clone() const ua = req.headers.get('user-agent') || '' const fixed = req.cookies.get('device')?.value const device = fixed || (isMobile(ua) ? 'mobile' : 'desktop') if (!fixed) { const res = NextResponse.next() res.cookies.set('device', device, { path: '/' }) return res } if (url.pathname === '/') { url.pathname = device === 'mobile' ? '/(mobile)' : '/(desktop)' return NextResponse.rewrite(url) } return NextResponse.next() } export const config = { matcher: ['/((?!_next|api|static).*)'] } 治理要点提供手动切换入口并更新 Cookie,尊重用户选择。与 SEO 协作:canonical 指向主路径,避免重复索引。对机器人与抓取 UA 维持桌面版本,避免误判。验证与指标浏览器:现代浏览器;边缘环境兼容Next.js:15.0+;Edge Runtime:稳定分流可靠;移动与桌面体验一致

发表评论 取消回复