Imagina un blog con 50 posts. ¿Vas a crear 50 archivos .astro a mano? Por supuesto que no. La solución son las rutas dinámicas: una sola plantilla que se "instancia" para cada parámetro.
Cuando un nombre de archivo contiene un nombre entre corchetes, Astro lo interpreta como un parámetro:
El nombre dentro de [ ] se convierte en una clave que tu archivo puede leer.
En modo estático (el por defecto), Astro necesita saber qué páginas concretas generar. Para eso, exportas una función getStaticPaths:
Astro generará tres páginas: /posts/1, /posts/2 y /posts/3.
En la práctica, los paths suelen venir de un fetch o de una colección de contenido:
El campo props es una vía cómoda para evitar volver a buscar los datos del post dentro del template.
Si tu sitio es server-rendered (output: "server"), no necesitas getStaticPaths. Cada petición trae sus propios Astro.params:
(Cuidado en SSR con paths inválidos: tendrás que devolver un 404 manualmente si la API no encuentra el recurso.)
[...resto]Para capturar varios segmentos a la vez:
/docs/getting-started/install → Astro.params.path === "getting-started/install". Útil para docs anidados.
Tienes src/pages/posts/[id].astro casi vacío. Tu trabajo:
getStaticPaths() que devuelva un array con los IDs "1", "2" y "3". Cada elemento del array tiene la forma { params: { id: "1" } }.Astro.params (const { id } = Astro.params).<h1>.Si todo va bien, tendrás tres páginas accesibles: /posts/1, /posts/2 y /posts/3. Cambiando el array cambias las páginas que se generan, sin tocar el template.