Saltar al contenido

¿Cómo soluciono los problemas de reescritura de URI cuando uso CloudFront Functions?

4 minutos de lectura
0

Intenté usar Amazon CloudFront Functions para reescribir o cambiar la ruta de URI de las solicitudes entrantes, pero tengo problemas con las reescrituras de URI.

Resolución

No asociaste la función de CloudFront con el comportamiento correcto de la caché

Comprueba que has asociado la función de CloudFront con la configuración correcta del comportamiento de la caché y el patrón de rutas para las solicitudes que deseas modificar. Si varios comportamientos de la caché coinciden con las mismas solicitudes, CloudFront usa el que tenga la prioridad más alta.

Sigue estos pasos:

  1. Abre la consola de CloudFront.
  2. En el panel de navegación, elige Distribuciones y, a continuación, selecciona tu distribución.
  3. Selecciona la pestaña Comportamientos y, a continuación, revisa el patrón de ruta de cada comportamiento.

La ruta de URI no coincide después de la ejecución de la función de CloudFront

Revisa los registros de CloudFront Functions para ver si hay errores de «discordancia de rutas de URI». Si recibes este error, significa que la ruta de URI reescrita no coincide con el formato esperado después de la ejecución de la función.

Revisa el código de función de CloudFront para asegurarte de que cambia correctamente la ruta de URI. La ruta de URI no puede contener caracteres incorrectos y debe incluir una barra diagonal inicial (/).

Ejemplo de ruta de URI:

/analytics.js/v1/xT5Qstsd35FL5WgikA1ABwyCQUDDYPHx/analytics.min.js';

Para obtener más información, consulta Visualización de métricas de funciones periféricas y de CloudFront.

El certificado SSL no coincide con el origen y el dominio solicitado

Se produce un problema cuando la función de CloudFront reescribe el valor del encabezado del host y ya no coincide con el dominio del certificado SSL. A continuación, la función de CloudFront reenvía la solicitud a un dominio diferente del dominio que figura en el certificado SSL.

Para resolver este problema, modifica la función de CloudFront para reescribir el valor del encabezado del host para que coincida con el dominio del certificado SSL del origen.

Por ejemplo, si el certificado SSL del origen usa ejemplo.com pero el dominio solicitado es www.ejemplo.com, agrega el siguiente código a la función de CloudFront:

request.headers['host'] = ['example.com'];

El encabezado del host ahora se reescribe en ejemplo.com antes de reenviar la solicitud al origen.

El URI es incorrecto en los despliegues de SPA

Si has desplegado una aplicación de una sola página (SPA) a través de CloudFront, comprueba los requisitos para reescribir las solicitudes para entregar el archivo index.html, excepto en el caso de los activos estáticos. Por ejemplo, las solicitudes no comprueban si hay activos estáticos, como archivos JavaScript o CSS.

Utiliza el siguiente código en la función de CloudFront para comprobar si hay una extensión de archivo o una barra al final del URI:

function handler(event) {
    var request = event.request;
    var uri = request.uri;

    // Check whether the URI is missing a file name or a file extension.
    if (uri.endsWith('/') || !uri.includes('.')) {
        request.uri = '/index.html';
    }

    return request;
}

Si la solicitud proviene del SPA, reescribe el URI en /index.html. Si la solicitud no proviene del SPA, el URI no cambia y permite que las solicitudes de activos estáticos pasen sin modificaciones.

La barra no aparece en el URI cuando cambias una URL

Si usas una función de CloudFront para acortar o cambiar las URL, agrega una barra diagonal al principio del URI para aceptar la solicitud de URL.

Ejemplo de función de CloudFront para acortar la URL:

request.uri = '/' + newShortUrl;
return request;

Información relacionada

Redirigir a una nueva URL en un evento de solicitud de visor de CloudFront Functions

Reescribir el URI de una solicitud en función de la configuración de KeyValueStore para un evento de solicitud de un visor de CloudFront Functions

OFICIAL DE AWSActualizada hace 3 meses