Tengo que manejar la ruta por la que el usuario accede a mi aplicación SPA, que se entrega a través de una distribución de CloudFront.
La ruta es domain.com/client-slug/country-slug/language-slug/... .
Estos 3 parámetros de ruta, client-slug , country-slug y language-slug deben estar presentes para que el SPA funcione correctamente.
El client-slug es obligatorio: sin él, el usuario debe ser redirigido a uno predeterminado y la ruta de ubicación debe volver a escribirse. Este client-slug se envía a través de una API REST para comprobar si existe, es válido y está online, devolviendo el país y el idioma disponible para el acceso que se está realizando. Si en el acceso del usuario se informa un país y/o un idioma, se utilizan en esta solicitud, por lo que también se pueden validar.
El country-slug se calcula utilizando el encabezado de país de CloudFront. Si es incorrecto, falta o tiene el marcador de posición WorldWide ww value, el usuario debe ser redirigido al de CF.
Lo mismo para language-slug , pero solo si este idioma está disponible para el país definido previamente.
Entonces, por ejemplo, aquí tenemos una lista de Ruta de ubicación original a Ruta de ubicación final:
domain.com => domain.com/default-slug/country/language domain.com/events => domain.com/default-slug/country/language/events domain.com/valid-client-slug => domain.com/valid-client-slug/country/language domain.com/valid-client-slug/events => domain.com/valid-client-slug/country/language/events Además, la aplicación está escrita en AngularJS, por lo que debe enrutar al usuario a un archivo de entrada, index.html en este caso.
Puede lograr esto usando CloudFront Functions (CF2) en el activador de solicitud del espectador. Parece que necesitas dos cosas:
Para 1, puede usar los encabezados de país de CloudFront como mencionó anteriormente. Para acceder a estos encabezados HTTP desde una función CF2, deberá incluirlos en su política de solicitud de origen para que estén disponibles para la función CF2. Sugeriría no ponerlos en su política de caché porque de todos modos estará reescribiendo el URI que se usará para la clave de caché. Y sí, aunque agrega los encabezados en una política de solicitud de origen, están normalizados y disponibles para una función CF2 que se ejecuta en un disparador de solicitud de espectador.
Para 2, querrá actualizar el URI de solicitud enviado al origen en la función. Este URI actualizado se usará para calcular su clave de caché, lo que garantiza que CF almacene en caché las solicitudes. Esta es una buena función de referencia para usar como ejemplo para implementar una reescritura de URI con CF2:
https://github.com/aws-samples/amazon-cloudfront-functions/tree/main/url-rewrite-single-page-apps