Ich habe eine Polymer-Webanwendung mit Firebase-Hosting bereitgestellt.
Das Routing zwischen Ansichten funktioniert, aber die Fehlerseitenbehandlung funktioniert nicht.
Es ist mir gelungen, das Problem an einem minimalen Beispiel mit dem offiziellen Polymer-2-Starter-Kit Beispiel zu reproduzieren:
Wenn Sie beispielsweise die folgende URL öffnen, wird die Fehlerseite nicht angezeigt:
Stattdessen erhalte ich den folgenden Fehler:
%Vor%Die Konfigurationsdatei firebase.json , die für das vorherige Beispiel verwendet wurde, ist hier:
%Vor%Ich möchte die Fehlerseitenbehandlung von Polymer gemacht haben.
Bitte beachten Sie, dass die gleiche App, die von polymer serve
bedient wird, ordnungsgemäß funktioniert.
Es scheint, dass das Problem von der Firebase-Hosting-Konfiguration kommt. Der gesamte Datenverkehr wird zu index.html umgeleitet. Wenn also Polymer eine nicht vorhandene Seite lädt, gibt der Firebase-Server eine HTTP 200-Antwort zurück. Leider habe ich keine Ahnung, wie ich das Problem beheben kann.
Ich habe versucht, eine Umleitung für Nicht-404-Antworten nur mit der folgenden Konfigurationsdatei zu erstellen:
%Vor%Leider kann die Eigenschaft type nur für 3xx-Code verwendet werden:
%Vor%Bitte beachten Sie auch, dass eine benutzerdefinierte Datei 404.html auf der Website platziert wird root .
Die einzige Lösung, die ich sehe, ist, alle existierenden Routen (pro Datei) aufzulisten, aber es sieht einfach verrückt aus.
Jede Idee ist willkommen.
Der Grund dafür, dass weder firebase noch polymere Ihre 404
Seite bearbeiten, ist, dass wenn Sie eine nicht existierende Seite anfragen, diese nicht nur mit dem Statuscode 200
zurückkommt, sondern auch mit HTML von der index
Seite, damit es etwas anzeigt, obwohl das eigentlich nichts ist.
Jetzt, wo Polymer eingerichtet ist, sucht es nach Ansichten im Ordner src
. Sie möchten also nur im Stammverzeichnis und nicht im src
-Ordner neu geschrieben werden. Ändere also deine firebase.json
zu
Die einzelne *
bezieht sich auf Dateien, aber nicht auf Unterordner. Dadurch kann Ihre Route funktionieren, wenn Sie sie in die Adressleiste eingeben, aber wenn die Seite nicht gefunden wird, wird die 404
von der Polymer-Route verarbeitet. Ich habe eine Firebase-Anwendung mit dem Polymer Starter Pack als Beispiel erstellt.
Funktioniert und führt Sie zu view2
, da die ursprüngliche Anfrage neu geschrieben wird, um index.html zurückzugeben, die Anfrage für /src/my-view2.html
jedoch nicht
Während eine Route nicht definiert ist
Wird einen 404 (in Polymer) werfen, da die ursprüngliche Anfrage erneut geschrieben wird, um index.html
zurückzugeben, aber die Anfrage für /src/my-not-existing.html
wird nicht und wird glücklicherweise eine 404 werfen!
P.S. Der Grund für den Fehler 'baseUrl' has already been declared'
liegt in der Tatsache begründet, dass die Seite zweimal index.html verwendet hat, was den baseUrl ganz oben deklariert.
Bearbeiten
Wenn Sie Unterpfade haben, können Sie firebase.json
like so verwenden
Gemäß der Dokumentation müssen Sie die Handhabung nicht vornehmen. Erstellen Sie einfach eine 404.html:
Sie können einen benutzerdefinierten 404 / Not Found-Fehler angeben, der beim Versuch eines Benutzerzugriffs auf eine Seite, die nicht existiert, zugestellt wird. Fügen Sie einfach eine 404.html-Seite zum öffentlichen Verzeichnis Ihres Projekts hinzu, und der Inhalt dieser Seite wird angezeigt, wenn Firebase Hosting dem Benutzer den Fehler 404 Not Found anzeigen muss.
Um den baseUrl-Fehler zu vermeiden, wenn Sie Zugriff auf diese Codezeile haben:
let baseUrl = document.querySelector('base').href;
Versuchen Sie, es zu ändern für:
baseUrl = baseUrl || document.querySelector('base').href;
Es ist nicht sehr ordentlich, aber es sollte sich nicht über den bereits definierten Wert beschweren.
Obwohl ich denke, dass dies nichts mit Ihrem Problem zu tun hat und diesen Fehler möglicherweise nicht mehr anzeigt, sobald eine korrekte 404-Seite definiert wurde.
Tags und Links javascript firebase polymer firebase-hosting