Capítulo 239 de 456
Mapeia um path de requisição para um destino diferente sem trocar a URL visível (age como proxy). Diferente de redirects, rewrites se aplicam a client-side routing e podem apontar para URLs externas.
{ beforeFiles, afterFiles, fallback } (controle fino, desde v10.1) de objetos { source, destination, basePath, locale, has, missing }.source/destination/has/missing/basePath/locale de redirects, mesma sintaxe de path matching (wildcard */+/?, regex entre parênteses, escape de caracteres especiais).headers verificados/aplicadosredirects verificados/aplicadosproxybeforeFiles rewrites (checa TODOS antes de tocar no filesystem/dynamic routes)public/, _next/static) e páginas não-dinâmicasafterFiles rewrites (primeiro que resolver para arquivo estático/página/rota dinâmica é servido)app/blog/[slug]/page.tsx)fallback rewrites (antes da página 404; getStaticPaths com fallback: true/'blocking' tem prioridade sobre isso)source é usado no destination, todos são passados automaticamente na query.destination, NENHUM é passado automaticamente — precisa adicionar manualmente (destination: '/:first?second=:second').Útil para adoção incremental do Next.js: destination pode ser uma URL externa completa (https://example.com/blog/:slug). Com trailingSlash: true, source (e destination, se o servidor externo exigir) também precisam da barra final.
fallback combinado com destino externo permite fazer proxy total pro site legado após checar todas as rotas Next.js, sem precisar reconfigurar rewrites ao migrar mais páginas.
module.exports = {
rewrites() {
return {
beforeFiles: [{ source: '/some-page', destination: '/somewhere-else', has: [{ type: 'query', key: 'overrideMe' }] }],
afterFiles: [{ source: '/non-existent', destination: '/somewhere-else' }],
fallback: [{ source: '/:path*', destination: 'https://my-old-site.com/:path*' }],
}
},
}
module.exports = {
rewrites() {
return [{ source: '/blog', destination: 'https://example.com/blog' }]
},
}
| Fase | Quando é checada |
|---|---|
beforeFiles | após headers/redirects, antes de qualquer arquivo (_next, public, páginas) |
afterFiles | após arquivos/páginas, antes de rotas dinâmicas |
fallback | após páginas/arquivos estáticos E rotas dinâmicas, antes do 404 |
| Versão | Mudança |
|---|---|
v13.3.0 | missing adicionado. |
v10.2.0 | has adicionado. |
v9.5.0 | Headers adicionado. |
<Link>); redirects não, a menos que proxy esteja envolvido.basePath: false numa rewrite para URL externa não pode ser usado para rewrite interno (destination: '/another').source/has/missing, mas rewrite mascara a URL em vez de trocá-la.beforeFiles.source/destination automaticamente salvo basePath: false.