Next.js 13中间件本地正常,部署至AWS Amplify后未执行求助
以下是针对你遇到问题的具体排查和解决方向,都是实际部署中常见的坑:
确认Amplify对Next.js Middleware的版本支持
Amplify对Next.js Middleware的支持从Next.js 12.x版本开始,先检查项目的package.json里Next.js版本是否≥12。同时确保Amplify构建配置里的build命令是标准的next build,避免自定义命令导致Middleware未被编译。核对Middleware文件的位置与命名
必须确保middleware.ts/middleware.js放在项目根目录或src/根目录下(如果用了src目录结构),绝对不能放在pages/文件夹内。Amplify严格遵循Next.js的官方文件结构规范,位置错误直接导致Middleware不被加载。验证pathExtension逻辑的环境兼容性
本地和Amplify部署环境的路径解析可能存在差异,比如Amplify的CDN会给静态资源添加前缀。可以在Middleware中加入日志输出:console.log('Middleware triggered for path:', request.nextUrl.pathname); console.log('Path extension:', path.extname(request.nextUrl.pathname));然后去Amplify控制台的构建日志或CloudWatch日志里查看输出,确认路径判断逻辑是否和本地一致,有没有出现预期外的路径格式。
检查Amplify的重写/重定向规则
进入Amplify控制台→你的应用→App settings→Rewrites and redirects,确认没有自定义规则提前拦截了需要Middleware处理的请求。默认的Next.js重写规则应该是:Source: </[.]+$|.(?!(css|gif|ico|jpg|js|png|svg|txt|map|json)$)([^.]+$)/>, Target: /index.html, Type: 200
如果添加了自定义规则,确保不会覆盖Middleware的处理路径。清理Amplify构建缓存重新构建
Amplify的缓存可能残留旧的构建产物,导致Middleware未更新。可以在构建设置里勾选"Disable cache"重新构建,或者在amplify.yml中添加清理步骤:build: commands: - rm -rf .next - npm run build查看Amplify的运行日志
进入Amplify控制台→你的应用→Build→点击最近的构建记录,查看"Build logs"和"Deploy logs",搜索"middleware"关键词:- 如果完全没有Middleware相关日志,说明文件未被识别,回到文件位置和命名的排查;
- 如果有日志但逻辑未执行,说明路径判断或业务逻辑存在环境差异。
内容的提问来源于stack exchange,提问作者Ernesto Grandoli

