Next.js 14 App Router多语言站点robots.txt访问404求助
问题排查与解决方案
你的问题核心是中间件(middleware)的路径重写逻辑误处理了robots.txt请求,导致请求被重定向/重写到带语言前缀的路径(比如/en/robots.txt),而你并没有在对应语言目录下配置该文件,因此返回404。以下是具体解决步骤:
1. 更新中间件的匹配规则,排除robots.txt
修改middleware.js中的config.matcher,将robots.txt加入排除列表,让中间件不再处理该请求:
export const config = { matcher: ["/((?!api|_next/static|_next/image|favicon.ico|robots.txt).*)"] };
2. 确认robots.txt的正确放置位置
根据Next.js 14 App Router的规则,robots.txt有两种配置方式:
- 静态文件方式:直接将
robots.txt放在项目根目录的public/文件夹下,Next.js会自动对外提供http://localhost:3000/robots.txt的访问。 - 动态生成方式:在
app/robots.txt/目录下创建route.js文件,通过代码动态生成内容,示例:export function GET() { return new Response(`User-agent: *
Allow: /
Sitemap: http://localhost:3000/sitemap.xml`, {
headers: { 'Content-Type': 'text/plain' },
})
}
## 3. 清除浏览器缓存后测试 浏览器可能会缓存之前的404响应,测试前先清除缓存或使用无痕模式访问`http://localhost:3000/robots.txt`。 ## 为什么之前添加`robots.txt`到matcher没生效? 你提到尝试过加入matcher但没解决,可能是修改后的代码没有热更新生效,或者缓存导致的。确保保存代码后,Next.js开发服务器已重新加载,必要时重启服务器验证。 内容的提问来源于stack exchange,提问作者oladimeji
相关产品推荐
相关产品推荐

