Direkt zum Inhalt

Wie behebe ich Probleme mit URI-Rewrites, wenn ich CloudFront-Funktionen verwende?

Lesedauer: 3 Minute
0

Ich habe versucht, Amazon CloudFront-Funktionen zu verwenden, um den URI-Pfad eingehender Anfragen umzuschreiben oder zu ändern, aber ich habe Probleme mit URI-Rewrites.

Lösung

Du hast die CloudFront-Funktion nicht mit dem richtigen Cache-Verhalten verknüpft

Stelle sicher, dass du die CloudFront-Funktion mit dem richtigen Cache-Verhalten und den richtigen Pfadmustereinstellungen für die Anfragen verknüpft hast, die du ändern möchtest. Wenn mehrere Cache-Verhalten denselben Anfragen entsprechen, verwendet CloudFront das Verhalten mit der höchsten Priorität.

Führe die folgenden Schritte aus:

  1. Öffne die CloudFront-Konsole.
  2. Wähle im Navigationsbereich Distributionen und dann deine Distribution aus.
  3. Wähle die Registerkarte Verhalten aus und überprüfe dann das Pfadmuster für jedes Verhalten.

Der URI-Pfad stimmt nach der Ausführung der CloudFront-Funktion nicht überein

Überprüfe deine CloudFront-Funktionsprotokolle auf „URI path mismatch“-Fehler. Wenn du diesen Fehler erhalten hast, entspricht der neu geschriebene URI-Pfad nach der Funktionsausführung nicht dem erwarteten Format.

Überprüfe den CloudFront-Funktionscode, um sicherzustellen, dass er den URI-Pfad korrekt ändert. Der URI-Pfad darf keine ungültigen Zeichen enthalten und muss mit einem Schrägstrich (/) beginnen.

Beispiel für einen URI-Pfad:

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

Weitere Informationen findest du unter CloudFront- und Edge-Funktionsmetriken anzeigen.

Das SSL-Zertifikat stimmt nicht mit der Herkunft und der angeforderten Domain überein

Ein Problem tritt auf, wenn die CloudFront-Funktion den Host-Header-Wert umschreibt und er nicht mehr mit der SSL-Zertifikats-Domain übereinstimmt. Die CloudFront-Funktion leitet die Anfrage dann an eine Domain weiter, die sich von der Domain im SSL-Zertifikat unterscheidet.

Um dieses Problem zu beheben, ändere die CloudFront-Funktion so, dass der Host-Header-Wert umgeschrieben wird, sodass er der SSL-Zertifikats-Domain des Ursprungs entspricht.

Wenn das SSL-Zertifikat des Ursprungs beispielsweise example.com verwendet, die angeforderte Domain jedoch www.example.com ist, füge der CloudFront-Funktion den folgenden Code hinzu:

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

Der Host-Header schreibt jetzt auf example.com um, bevor er die Anfrage an den Ursprung weiterleitet.

Die URI in SPA-Bereitstellungen ist falsch

Wenn du eine Single-Page-Anwendung (SPA) über CloudFront bereitgestellt hast, überprüfe, ob Anforderungen zum Umschreiben von Anfragen zur Bereitstellung der Datei index.html erforderlich sind, mit Ausnahme von statischen Assets. Beispielsweise suchen die Anfragen nicht nach statischen Assets wie JavaScript- oder CSS-Dateien.

Verwende den folgenden Code in der CloudFront-Funktion, um nach einer Dateierweiterung oder einem abschließenden Schrägstrich in der URI zu suchen:

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;
}

Wenn die Anfrage von der SPA stammt, schreibt sie den URI in /index.html um. Wenn die Anfrage nicht von der SPA stammt, ändert sich die URI nicht und ermöglicht, dass Anfragen nach statischen Assets unverändert durchgelassen werden.

Der Schrägstrich fehlt in der URI, wenn du eine URL änderst

Wenn du eine CloudFront-Funktion verwendest, um URLs zu verkürzen oder zu ändern, füge am Anfang der URI einen Schrägstrich hinzu, um die URL-Anfrage anzunehmen.

Beispiel für eine CloudFront-Funktion zur Verkürzung der URL:

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

Ähnliche Informationen

In einem Viewer-Anfrageereignis für CloudFront-Funktionen zu einer neuen URL umleiten

Anforderungs-URI basierend auf der KeyValueStore-Konfiguration für ein CloudFront-Funktions-Viewer-Anfrageereignis umschreiben

AWS OFFICIALAktualisiert vor 7 Monaten