Estoy atendiendo una solicitud HTTP de Amazon CloudFront usando Amazon S3 para almacenar el archivo. El depósito S3 está configurado como alojamiento de sitios web habilitado. El documento de índice es index.html .
Cuando busco en Google, veo estas dos URL:
{url}/index.html{url}/Ambas URL sirven el mismo contenido.
¿Cómo puedo configurarlo de modo que {url}/index.html realice un código 301 Movido permanentemente a {url}/ ?
Dos opciones, con diferentes niveles de complejidad:
Use una etiqueta <link> para decirle a Google cuál es la URL canónica de un documento determinado:
<link rel="canonical" href="https://example.com/">Puede usar una función Lambda simple implementada en los servidores perimetrales de CloudFront. Siga este tutorial y el cuerpo de la función que desea (Node.js 8.10) es:
exports.handler = (event, context, callback) => { const { request } = event.Records[0].cf; const isIndex = request.uri.endsWith('/index.html'); if (isIndex) { const withoutIndex = request.uri.replace(/\/index\.html$/, ''); callback(null, redirect(withoutIndex)); } else callback(null, request); }; function redirect(url) { return { status: '301', statusDescription: 'Moved Permanently', headers: { location: [{ key: 'Location', value: url }] } }; }Idealmente, si se trata de contenido estático, no es necesario redirigir la forma en que lo solicitó ...
Podría tener una configuración de tal manera que si el usuario solicita {url}/ luego redirija el frente de la nube para servir {url}/index.html pero no de otra manera...
Referencia: http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DefaultRootObject.html