Ao executar bun dev, /blog/ retornava 404, mas /en/blog/ era renderizado corretamente.
A causa final não era a configuração de roteamento, e sim uma colisão de nome de diretório.
Sintomas
http://localhost:4321/blog/retorna 404http://localhost:4321/en/blog/funciona- O build de produção (
bun run build) ainda gera/blog/index.html
O que suspeitei primeiro
Primeiro suspeitei da geração de links e de paths por locale.
- O
href: "/blog"emHeaderNavestava quebrado? getLocalePath()estava se comportando incorretamente apenas para japonês?/blogestava sendo removido porprefixDefaultLocale: false?
Nenhum desses pontos era o problema.
Processo de verificação
Validei os fatos nesta ordem:
- Verificar saída estática
- Os logs de
bun run buildincluem/blog/index.html dist/blog/index.htmlrealmente existe
- Os logs de
- Verificar links renderizados
- O link de navegação em
dist/index.htmlé"/blog/" - O link em
dist/en/index.htmlé"/en/blog/"
- O link de navegação em
- Verificar comportamento de i18n
- Com
prefixDefaultLocale: false, japonês deveria ser/blog/ /ja/blog/retornar 404 é esperado
- Com
Nesse ponto, a definição de rota e a geração de links já estavam corretas.
Causa raiz
Havia um diretório de nível superior blog/ usado para arquivos-fonte de artigos.
Ao mesmo tempo, o roteamento de páginas usava src/pages/blog/index.astro.
Assim, o diretório real blog/ entrou em conflito com o segmento de URL /blog.
No bun dev, essa colisão causou o 404.
Correção
- Mover os arquivos-fonte de
blog/paracontent/blog/ - Atualizar a base do loader em
src/content.config.tspara./content/blog
Depois disso, /blog/ passou a renderizar corretamente no bun dev.
Ordem de checagem reutilizável
Se o mesmo problema aparecer de novo:
- Confirmar que
bun run buildgera/blog/index.html - Confirmar que o link em
dist/index.htmlaponta para/blog/ - Confirmar o comportamento de
prefixDefaultLocalee o/ja/blog/esperado - Verificar se existe diretório na raiz do projeto com o mesmo nome do segmento de URL
Principais aprendizados
- Evite usar o mesmo nome para segmentos de URL do Astro e diretórios na raiz do projeto
- Se build funciona e dev falha, compare primeiro o comportamento de entrega
- Para depurar 404, separe a checagem em valores de link, geração de rota e arquivos reais
hsb.horse