Passer au contenu

Comment résoudre les problèmes de réécriture d'URI lorsque j'utilise des fonctions CloudFront ?

Lecture de 4 minute(s)
0

J'ai essayé d'utiliser des fonctions Amazon CloudFront pour réécrire ou modifier le chemin URI de requêtes entrantes, mais je rencontre des problèmes lors de la réécriture des URI.

Résolution

Vous n'avez pas associé la fonction CloudFront au comportement de cache approprié

Vérifiez que vous avez associé la fonction CloudFront aux paramètres de comportement de cache et de modèle de chemin appropriés pour les requêtes que vous souhaitez modifier. Si plusieurs comportements de cache correspondent aux mêmes requêtes, CloudFront utilise celui qui a la priorité la plus élevée.

Procédez comme suit :

  1. Ouvrez la console CloudFront.
  2. Dans le volet de navigation, choisissez Distributions, puis sélectionnez votre distribution.
  3. Choisissez l'onglet Comportements, puis examinez le modèle de chemin pour chaque comportement.

Le chemin URI ne correspond pas après l'exécution de la fonction CloudFront

Vérifiez que vos journaux de fonctions CloudFront ne contiennent pas d'erreurs « URI path mismatch ». Si vous avez reçu cette erreur, cela signifie que le chemin URI réécrit ne correspond pas au format attendu après l'exécution de la fonction.

Vérifiez le code de la fonction CloudFront pour vous assurer qu'il modifie correctement le chemin URI. Le chemin URI ne doit pas contenir de caractères incorrects et doit inclure une barre oblique (/).

Exemple de chemin URI :

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

Pour plus d'informations, consultez la section Consulter les métriques des fonctions CloudFront et Edge.

Le certificat SSL ne correspond pas à l'origine et au domaine demandé

Un problème se produit lorsque la fonction CloudFront réécrit la valeur de l'en-tête d'hôte et qu'elle ne correspond plus au domaine de certificat SSL. La fonction CloudFront transmet ensuite la requête à un domaine différent de celui qui figure dans le certificat SSL.

Pour résoudre ce problème, modifiez la fonction CloudFront pour réécrire la valeur de l'en-tête d'hôte afin qu'elle corresponde au domaine de certificat SSL de l'origine.

Par exemple, si le certificat SSL de l'origine utilise example.com mais que le domaine demandé est www.example.com, ajoutez le code suivant à la fonction CloudFront :

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

L'en-tête d'hôte est à présent réécrit sur example.com avant de transmettre la requête à l'origine.

L'URI est incorrect dans les déploiements SPA

Si vous avez déployé une application monopage (SPA) via CloudFront, vérifiez les conditions requises pour réécrire les requêtes afin de diffuser le fichier index.html, à l'exception des ressources statiques. Par exemple, les requêtes ne vérifient pas les ressources statiques telles que les fichiers JavaScript ou CSS.

Utilisez le code suivant dans la fonction CloudFront pour rechercher une extension de fichier ou une barre oblique finale dans l'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 requête provient de la SPA, elle réécrit l'URI dans /index.html. Si la requête ne provient pas de la SPA, l'URI ne change pas et permet aux demandes de ressources statiques de passer sans modification.

La barre oblique est absente de l'URI lorsque vous modifiez une URL

Si vous utilisez une fonction CloudFront pour raccourcir ou modifier des URL, ajoutez une barre oblique au début de l'URI pour accepter la requête d'URL.

Exemple de fonction CloudFront pour raccourcir l'URL :

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

Informations connexes

Redirection vers une nouvelle URL dans un événement de requête d’utilisateur des fonctions CloudFront

Réécriture d’un URI de requête en fonction de la configuration de KeyValueStore pour un événement de requête d’utilisateur des fonctions CloudFront

AWS OFFICIELA mis à jour il y a 10 mois