El día de hoy descubrí que CloudFront no permite cargar el “Default Root Object”
comúnmente apuntando a index.html
en subdirectorios, solo en la raíz /
.
Existen dos opciones para obtener esta funcionalidad, la primera es habilitar el “bucket” en S3 como “Static website hosting”, pero esto hace que el “bucket” permita el acceso directo y no por medio de CloudFront.
La segunda opción es crear una sencilla función (viewer request
) de CloudFront para permitir que si una uri
no tiene extensión de archivo o termina en /
, automáticamente busque el archivo index.html
dentro del subdirectorio indicado, por ejemplo:
http://dominio.com/prueba -> http://dominio.com/prueba/index.html
http://dominio.com/prueba/ -> http://dominio.com/prueba/index.html
Esta es una solución oficial por parte de AWS, el repositorio se encuentra aquí .
function handler(event) {
var request = event.request;
var uri = request.uri;
// Check whether the URI is missing a file name.
if (uri.endsWith("/")) {
request.uri += "index.html";
}
// Check whether the URI is missing a file extension.
else if (!uri.includes(".")) {
request.uri += "/index.html";
}
return request;
}
También existe otra solución oficial utilizando Lambda@Edge , pero creo que con las nuevas funciones de CloudFront es mucho más sencillo.