Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

650
Vistas
Redirigir a index.html para la subcarpeta S3

Tengo un dominio example.com . Tengo un depósito S3 llamado configuración de example.com con un archivo index.html que funciona. Ahora me gusta crear dos subcarpetas llamadas old y new , cada una de las cuales contiene una versión separada de una aplicación de una sola página. Solicitar https://example.com/old (me gusta omitir index.html al ingresar la solicitud en la barra de direcciones del navegador) abriría el archivo index.html en la subcarpeta old y solicitaría https://example.com/new abriría index.html . ¿Cuál es la mejor manera de hacer estas redirecciones? ¿Debo configurar algo en Route 53 example.com/old -> example.com/old/index.html o hay una mejor manera de hacerlo?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

No es necesario que una función lambda agregue gastos y complejidad a su proyecto.

La siguiente respuesta se cita de https://stevepapa.com/

Se esperaría que https://stevepapa.com/my-great-new-post/ funcione de la misma manera que: https://stevepapa.com/my-great-new-post/index.html

Hay una pequeña forma inteligente de hacer que fluyan a través de la distribución de Cloudfront, e implica cambiar el origen de la fuente del que Cloudfront le presenta de forma predeterminada.

Al seleccionar la fuente de origen, Cloudfront le mostrará una lista de depósitos S3. edición de origen

En lugar de configurar la fuente desde el depósito que se muestra en la lista desplegable, deberá obtener el punto final de alojamiento web estático para ese recurso desde su página de configuración de S3 e ingresarlo manualmente. donde está la URL del punto final de alojamiento estático

El uso de la fuente estática para el origen de distribución de Cloudfront significa que cualquier solicitud a esa distribución utilizará la búsqueda de objetos raíz de S3, y sus respuestas 404 deberían desaparecer a medida que fluyen las referencias.

Importante

Después de hacer esto:

  • Limpia la memoria caché de tu navegador
  • Desvalide los elementos en su distribución de Cloudfront

De lo contrario, los cambios que realizó no se publicarán de inmediato.

over 4 years ago · Santiago Trujillo Denunciar

0

Así que tuve este problema anoche también.

El problema es el siguiente: S3, cuando se configura como un cubo de sitio web, perdona y tiene la configuración de documento de índice, establecida en index.html y esto se aplica en la raíz, es decir, example.com en realidad se redirige a example.com/index.html , y también se aplica en el nivel de subcarpeta, por lo que example.com/new o example.com/new/ deberían redirigir a example.com/new/index.html , donde habría un objeto en el depósito. (Si no, obtendría un error NoSuchKey en su lugar).

Sin embargo, luego se "actualiza" a CloudFront, probablemente para HTTPS, y esta característica desaparece. En cambio, CloudFront realiza llamadas API explícitas a S3 y, por lo tanto, no activa la concesión del documento de índice. Funciona para la raíz, pero no para las subcarpetas.

La solución RoutingRules no me parece clara porque al especificar KeyPrefixEquals en lugar de la clave exactamente igual (que no existe), creo que obtendría coincidencias no deseadas.

En su lugar, implementé una regla de Lambda@Edge que reescribe la solicitud que CloudFront hace a S3 para tener un valor de clave adecuado.

Comience con los documentos de Lambda y el ejemplo de prueba A/B aquí: https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-examples.html#lambda-examples-general-examples

Cambia el código a:

 'use strict'; exports.handler = (event, context, callback) => { /* * Expand S3 request to have index.html if it ends in / */ const request = event.Records[0].cf.request; if ((request.uri !== "/") /* Not the root object, which redirects properly */ && (request.uri.endsWith("/") /* Folder with slash */ || (request.uri.lastIndexOf(".") < request.uri.lastIndexOf("/")) /* Most likely a folder, it has no extension (heuristic) */ )) { if (request.uri.endsWith("/")) request.uri = request.uri.concat("index.html"); else request.uri = request.uri.concat("/index.html"); } callback(null, request); };

Y publíquelo en su distribución de CloudFront.

over 4 years ago · Santiago Trujillo Denunciar

0

Hay una manera aún más fácil de lograr esto con un archivo de redirección HTML

  1. Cree un archivo sin formato llamado my-great-new-post (no se preocupe, no habrá un conflicto de nombres con la carpeta en el mismo depósito)

  2. Escriba un código de meta-redireccionamiento en ese archivo (pegué el código a continuación)

  3. cargue el archivo en el depósito raíz (donde se encuentra la carpeta my-great-new-post)

  4. modificar los metadatos del nuevo archivo y hacer Content-Type:text/html

Aquí está el contenido del archivo:

 <!DOCTYPE html> <html> <head> <meta http-equiv="refresh" content="0; url=/my-great-new-post/index.html"> </head> <body> </body> </html>

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda