Konfigurieren Sie das Hosting-Verhalten

Mit Firebase Hosting können Sie ein individuelles Hosting-Verhalten für Anfragen an Ihre Site konfigurieren.

Was können Sie für das Hosting konfigurieren?

  • Geben Sie an, welche Dateien in Ihrem lokalen Projektverzeichnis Sie auf Firebase Hosting bereitstellen möchten. Lernen wie.

  • Stellen Sie eine angepasste 404/Nicht gefunden-Seite bereit. Lernen wie.

  • Richten Sie redirects für Seiten ein, die Sie verschoben oder gelöscht haben. Lernen wie.

  • Richten Sie rewrites für einen dieser Zwecke ein:

    • Zeigen Sie denselben Inhalt für mehrere URLs an. Lernen wie.

    • Stellen Sie eine Funktion bereit oder greifen Sie über eine Hosting-URL auf einen Cloud Run-Container zu. Erfahren Sie, wie: Funktion oder Container .

    • Erstellen Sie einen benutzerdefinierten Domänen-Dynamic Link. Lernen wie.

  • Fügen Sie headers hinzu, um zusätzliche Informationen zu einer Anfrage oder Antwort weiterzugeben, z. B. wie Browser mit der Seite und ihrem Inhalt umgehen sollen (Authentifizierung, Caching, Codierung usw.). Lernen wie.

  • Richten Sie Umschreibungen für die Internationalisierung (i18n) ein, um spezifische Inhalte basierend auf der Sprachpräferenz und/oder dem Land eines Benutzers bereitzustellen. Erfahren Sie wie (andere Seite).

Wo definieren Sie Ihre Hosting-Konfiguration?

Sie definieren Ihre Firebase Hosting-Konfiguration in Ihrer Datei firebase.json . Firebase erstellt Ihre Datei firebase.json automatisch im Stammverzeichnis Ihres Projektverzeichnisses, wenn Sie den Befehl firebase init ausführen.

Unten auf dieser Seite finden Sie ein vollständiges Beispiel für die Konfiguration firebase.json (das nur Firebase Hosting abdeckt). Beachten Sie, dass eine firebase.json Datei auch Konfigurationen für andere Firebase-Dienste enthalten kann.

Sie können den bereitgestellten Inhalt firebase.json mithilfe der Hosting-REST-API überprüfen.

Prioritätsreihenfolge der Hosting-Antworten

Die verschiedenen auf dieser Seite beschriebenen Konfigurationsoptionen für Firebase Hosting können sich manchmal überschneiden. Im Falle eines Konflikts bestimmt das Hosting seine Reaktion anhand der folgenden Prioritätsreihenfolge:

  1. Reservierte Namespaces, die mit einem /__/* Pfadsegment beginnen
  2. Konfigurierte Weiterleitungen
  3. Genau passender statischer Inhalt
  4. Konfigurierte Umschreibungen
  5. Benutzerdefinierte 404- Seite
  6. Standard-404-Seite

Wenn Sie i18n-Umschreibungen verwenden, wird der Umfang der Prioritätsreihenfolge für exakte Übereinstimmung und 404-Behandlung erweitert, um Ihren „i18n-Inhalt“ zu berücksichtigen.

Geben Sie an, welche Dateien bereitgestellt werden sollen

Die in der Standarddatei „ firebase.json enthaltenen Standardattribute „ public “ und ignore “ definieren, welche Dateien in Ihrem Projektverzeichnis in Ihrem Firebase-Projekt bereitgestellt werden sollen.

Die Standard- hosting Konfiguration in einer Datei firebase.json sieht folgendermaßen aus:

"hosting": {
  "public": "public",  // the only required attribute for Hosting
  "ignore": [
    "firebase.json",
    "**/.*",
    "**/node_modules/**"
  ]
}

öffentlich

Erforderlich
Das public Attribut gibt an, welches Verzeichnis auf Firebase Hosting bereitgestellt werden soll. Der Standardwert ist ein Verzeichnis mit dem Namen public , Sie können jedoch den Pfad eines beliebigen Verzeichnisses angeben, sofern dieser in Ihrem Projektverzeichnis vorhanden ist.

Das Folgende ist der standardmäßig angegebene Name des bereitzustellenden Verzeichnisses:

"hosting": {
  "public": "public"

  // ...
}

Sie können den Standardwert auf das Verzeichnis ändern, das Sie bereitstellen möchten:

"hosting": {
  "public": "dist/app"

  // ...
}

ignorieren

Optional
Das Attribut ignore gibt die Dateien an, die bei der Bereitstellung ignoriert werden sollen. Es kann Globs auf die gleiche Weise annehmen, wie Git mit .gitignore umgeht.

Im Folgenden sind die Standardwerte für die zu ignorierenden Dateien aufgeführt:

"hosting": {
  // ...

  "ignore": [
    "firebase.json",  // the Firebase configuration file (the file described on this page)
    "**/.*",  // files with a leading period should be hidden from the system
    "**/node_modules/**"  // contains dependencies used to create your site but not run it
  ]
}

Passen Sie eine 404/Nicht gefunden-Seite an

Optional
Sie können einen benutzerdefinierten Fehler 404 Not Found ausgeben, wenn ein Benutzer versucht, auf eine Seite zuzugreifen, die nicht existiert.

Erstellen Sie eine neue Datei im public Verzeichnis Ihres Projekts, nennen Sie sie 404.html und fügen Sie dann Ihren benutzerdefinierten 404 Not Found Inhalt zur Datei hinzu.

Firebase Hosting zeigt den Inhalt dieser benutzerdefinierten 404.html Seite an, wenn ein Browser in Ihrer Domain oder Subdomain den Fehler 404 Not Found auslöst.

Weiterleitungen konfigurieren

Optional
Verwenden Sie eine URL-Umleitung, um fehlerhafte Links zu verhindern, wenn Sie eine Seite verschoben haben, oder um URLs zu kürzen. Beispielsweise könnten Sie einen Browser von example.com/team zu example.com/about.html umleiten.

Geben Sie URL-Weiterleitungen an, indem Sie ein redirects erstellen, das ein Array von Objekten enthält (sogenannte „Umleitungsregeln“). Geben Sie in jeder Regel ein URL-Muster an, das bei Übereinstimmung mit dem Anforderungs-URL-Pfad Hosting dazu veranlasst, mit einer Weiterleitung an die angegebene Ziel-URL zu antworten.

Hier ist die Grundstruktur für ein redirects . In diesem Beispiel werden Anfragen an /foo umgeleitet, indem eine neue Anfrage an /bar gestellt wird.

"hosting": {
  // ...

  // Returns a permanent redirect to "/bar" for requests to "/foo" (but not "/foo/**")
  "redirects": [ {
    "source": "/foo",
    "destination": "/bar",
    "type": 301
  } ]
}

Das Attribut redirects enthält ein Array von Umleitungsregeln, wobei jede Regel die Felder in der folgenden Tabelle enthalten muss.

Firebase Hosting vergleicht den source oder regex Wert zu Beginn jeder Anfrage mit allen URL-Pfaden (bevor der Browser feststellt, ob eine Datei oder ein Ordner in diesem Pfad vorhanden ist). Wenn eine Übereinstimmung gefunden wird, sendet der Firebase Hosting-Ursprungsserver eine HTTPS-Umleitungsantwort, die den Browser auffordert, eine neue Anfrage an die destination URL zu stellen.

Feld Beschreibung
redirects
source (empfohlen)
oder regex

Ein URL-Muster, das bei Übereinstimmung mit der ursprünglichen Anforderungs-URL Hosting dazu veranlasst, die Umleitung anzuwenden

destination

Eine statische URL, unter der der Browser eine neue Anfrage stellen soll

Diese URL kann ein relativer oder ein absoluter Pfad sein.

type

Der HTTPS-Antwortcode

  • Verwenden Sie den Typ 301 für „Dauerhaft verschoben“.
  • Verwenden Sie den Typ 302 für „Gefunden“ (temporäre Weiterleitung).

Erfassen Sie URL-Segmente für Weiterleitungen

Optional
Manchmal müssen Sie möglicherweise bestimmte Segmente des URL-Musters einer Umleitungsregel ( source oder regex Wert) erfassen und diese Segmente dann im destination der Regel wiederverwenden.

Konfigurieren Sie Umschreibungen

Optional
Verwenden Sie eine Umschreibung, um denselben Inhalt für mehrere URLs anzuzeigen. Umschreibungen sind beim Mustervergleich besonders nützlich, da Sie jede URL akzeptieren können, die dem Muster entspricht, und den clientseitigen Code entscheiden lassen können, was angezeigt werden soll.

Sie können Rewrites auch verwenden, um Apps zu unterstützen, die HTML5 pushState für die Navigation verwenden. Wenn ein Browser versucht, einen URL-Pfad zu öffnen, der dem angegebenen source oder regex -URL-Muster entspricht, erhält der Browser stattdessen den Inhalt der Datei unter der destination URL.

Geben Sie URL-Rewrites an, indem Sie ein rewrites Attribut erstellen, das ein Array von Objekten enthält (sogenannte „Rewrite-Regeln“). Geben Sie in jeder Regel ein URL-Muster an, das bei Übereinstimmung mit dem Anforderungs-URL-Pfad Hosting dazu veranlasst, zu reagieren, als ob dem Dienst die angegebene Ziel-URL gegeben worden wäre.

Hier ist die Grundstruktur für ein rewrites Attribut. In diesem Beispiel wird index.html für Anfragen an Dateien oder Verzeichnisse bereitgestellt, die nicht vorhanden sind.

"hosting": {
  // ...

  // Serves index.html for requests to files or directories that do not exist
  "rewrites": [ {
    "source": "**",
    "destination": "/index.html"
  } ]
}

Das rewrites Attribut enthält ein Array von Rewrite-Regeln, wobei jede Regel die Felder in der folgenden Tabelle enthalten muss.

Firebase Hosting wendet eine Umschreiberegel nur an, wenn eine Datei oder ein Verzeichnis nicht unter einem URL-Pfad vorhanden ist, der dem angegebenen source oder regex -URL-Muster entspricht. Wenn eine Anfrage eine Rewrite-Regel auslöst, gibt der Browser den tatsächlichen Inhalt der angegebenen destination anstelle einer HTTP-Umleitung zurück.

Feld Beschreibung
rewrites
source (empfohlen)
oder regex

Ein URL-Muster, das, wenn es mit der ursprünglichen Anforderungs-URL übereinstimmt, Hosting dazu veranlasst, die Umschreibung anzuwenden

destination

Eine lokale Datei, die vorhanden sein muss

Diese URL kann ein relativer oder ein absoluter Pfad sein.

Direkte Anfragen an eine Funktion

Sie können rewrites verwenden, um eine Funktion über eine Firebase-Hosting-URL bereitzustellen. Das folgende Beispiel ist ein Auszug aus der Bereitstellung dynamischer Inhalte mithilfe von Cloud Functions .

Um beispielsweise alle Anfragen von der Seite /bigben auf Ihrer Hosting-Site an die Ausführung der bigben Funktion weiterzuleiten:

"hosting": {
  // ...

  // Directs all requests from the page `/bigben` to execute the `bigben` function
  "rewrites": [ {
    "source": "/bigben",
    "function": {
      "functionId": "bigben",
      "region": "us-central1"  // optional (see note below)
      "pinTag": true           // optional (see note below)
    }
  } ]
}

Nachdem Sie diese Rewrite-Regel hinzugefügt und in Firebase bereitgestellt haben (mithilfe von firebase deploy ), ist Ihre Funktion über die folgenden URLs erreichbar:

  • Ihre Firebase-Subdomains:
    PROJECT_ID .web.app/bigben und PROJECT_ID .firebaseapp.com/bigben

  • Alle verbundenen benutzerdefinierten Domänen :
    CUSTOM_DOMAIN /bigben

Beim Umleiten von Anforderungen an Funktionen mit Hosting sind die unterstützten HTTP-Anforderungsmethoden GET , POST , HEAD , PUT , DELETE , PATCH und OPTIONS . Andere Methoden wie REPORT oder PROFIND werden nicht unterstützt.

Direkte Anfragen an einen Cloud Run-Container

Sie können rewrites verwenden, um über eine Firebase-Hosting-URL auf einen Cloud Run-Container zuzugreifen. Das folgende Beispiel ist ein Auszug aus der Bereitstellung dynamischer Inhalte mit Cloud Run .

Um beispielsweise alle Anfragen von der Seite /helloworld auf Ihrer Hosting-Site so weiterzuleiten, dass sie den Start und die Ausführung einer helloworld Containerinstanz auslösen:

"hosting": {
 // ...

 // Directs all requests from the page `/helloworld` to trigger and run a `helloworld` container
 "rewrites": [ {
   "source": "/helloworld",
   "run": {
     "serviceId": "helloworld",  // "service name" (from when you deployed the container image)
     "region": "us-central1"  // optional (if omitted, default is us-central1)
   }
 } ]
}

Nachdem Sie diese Rewrite-Regel hinzugefügt und in Firebase bereitgestellt haben (mithilfe von firebase deploy ), ist Ihr Container-Image über die folgenden URLs erreichbar:

  • Ihre Firebase-Subdomains:
    PROJECT_ID .web.app/helloworld und PROJECT_ID .firebaseapp.com/helloworld

  • Alle verbundenen benutzerdefinierten Domänen :
    CUSTOM_DOMAIN /helloworld

Beim Umleiten von Anfragen an Cloud Run-Container mit Hosting sind die unterstützten HTTP-Anfragemethoden GET , POST , HEAD , PUT , DELETE , PATCH und OPTIONS . Andere Methoden wie REPORT oder PROFIND werden nicht unterstützt.

Um die beste Leistung zu erzielen, platzieren Sie Ihren Cloud Run-Dienst mit Hosting in den folgenden Regionen:

  • us-west1
  • us-central1
  • us-east1
  • europe-west1
  • asia-east1

Umschreibungen in Cloud Run vom Hosting werden in den folgenden Regionen unterstützt:

  • asia-east1
  • asia-east2
  • asia-northeast1
  • asia-northeast2
  • asia-northeast3
  • asia-south1
  • asia-south2
  • asia-southeast1
  • asia-southeast2
  • australia-southeast1
  • australia-southeast2
  • europe-central2
  • europe-north1
  • europe-southwest1
  • europe-west1
  • europe-west12
  • europe-west2
  • europe-west3
  • europe-west4
  • europe-west6
  • europe-west8
  • europe-west9
  • me-central1
  • me-west1
  • northamerica-northeast1
  • northamerica-northeast2
  • southamerica-east1
  • southamerica-west1
  • us-central1
  • us-east1
  • us-east4
  • us-east5
  • us-south1
  • us-west1
  • us-west2
  • us-west3
  • us-west4
  • us-west1
  • us-central1
  • us-east1
  • europe-west1
  • asia-east1

Sie können rewrites verwenden, um benutzerdefinierte dynamische Domänenlinks zu erstellen. Ausführliche Informationen zum Einrichten einer benutzerdefinierten Domäne für Dynamic Links finden Sie in der Dynamic Links-Dokumentation.

  • Verwenden Sie Ihre benutzerdefinierte Domäne nur für dynamische Links

    "hosting": {
      // ...
    
      "appAssociation": "AUTO",  // required for Dynamic Links (default is AUTO if not specified)
    
      // Add the "rewrites" attribute within "hosting"
      "rewrites": [ {
        "source": "/**",  // the Dynamic Links start with "https://CUSTOM_DOMAIN/"
        "dynamicLinks": true
      } ]
    }
    
  • Geben Sie benutzerdefinierte Domänenpfadpräfixe an, die für dynamische Links verwendet werden sollen

    "hosting": {
      // ...
    
      "appAssociation": "AUTO",  // required for Dynamic Links (default is AUTO if not specified)
    
      // Add the "rewrites" attribute within "hosting"
      "rewrites": [ {
        "source": "/promos/**",  // the Dynamic Links start with "https://CUSTOM_DOMAIN/promos/"
        "dynamicLinks": true
      }, {
        "source": "/links/share/**",  // the Dynamic Links start with "https://CUSTOM_DOMAIN/links/share/"
        "dynamicLinks": true
      } ]
    }
    

Das Konfigurieren dynamischer Links in Ihrer firebase.json Datei erfordert Folgendes:

Feld Beschreibung
appAssociation

Muss auf AUTO eingestellt sein

  • Wenn Sie dieses Attribut nicht in Ihre Konfiguration einbeziehen, ist der Standardwert für appAssociation AUTO .
  • Durch Festlegen dieses Attributs auf AUTO kann Hosting bei Anforderung dynamisch assetlinks.json und apple-app-site-association Dateien generieren.
rewrites
source

Ein Pfad, den Sie für dynamische Links verwenden möchten

Im Gegensatz zu Regeln, die Pfade zu URLs umschreiben, können Umschreibungsregeln für dynamische Links keine regulären Ausdrücke enthalten.

dynamicLinks Muss auf true gesetzt sein

Header konfigurieren

Optional
Header ermöglichen es dem Client und dem Server, zusätzliche Informationen zusammen mit einer Anfrage oder Antwort zu übergeben. Einige Headersätze können sich darauf auswirken, wie der Browser die Seite und ihren Inhalt verarbeitet, einschließlich Zugriffskontrolle, Authentifizierung, Caching und Codierung.

Geben Sie benutzerdefinierte, dateispezifische Antwortheader an, indem Sie ein headers Attribut erstellen, das ein Array von Header-Objekten enthält. Geben Sie in jedem Objekt ein URL-Muster an, das bei Übereinstimmung mit dem Anforderungs-URL-Pfad Hosting dazu veranlasst, die angegebenen benutzerdefinierten Antwortheader anzuwenden.

Hier ist die Grundstruktur für ein headers Attribut. In diesem Beispiel wird ein CORS-Header für alle Schriftartdateien angewendet.

"hosting": {
  // ...

  // Applies a CORS header for all font files
  "headers": [ {
    "source": "**/*.@(eot|otf|ttf|ttc|woff|font.css)",
    "headers": [ {
      "key": "Access-Control-Allow-Origin",
      "value": "*"
    } ]
  } ]
}

Das headers Attribut enthält ein Array von Definitionen, wobei jede Definition die Felder in der folgenden Tabelle enthalten muss.

Feld Beschreibung
headers
source (empfohlen)
oder regex

Ein URL-Muster, das bei Übereinstimmung mit der ursprünglichen Anforderungs-URL Hosting dazu veranlasst, den benutzerdefinierten Header anzuwenden

Um einen Header zu erstellen, der mit Ihrer benutzerdefinierten 404-Seite übereinstimmt, verwenden Sie 404.html als source oder regex -Wert.

Array von (Unter-) headers

Die benutzerdefinierten Header, die Hosting auf den Anforderungspfad anwendet

Jeder Unterkopf muss ein key - value Paar enthalten (siehe die nächsten beiden Zeilen).

key Der Name des Headers, zum Beispiel Cache-Control
value Der Wert für den Header, zum Beispiel max-age=7200

Weitere Informationen zu Cache-Control finden Sie im Abschnitt „Hosting“, in dem die Bereitstellung dynamischer Inhalte und das Hosten von Mikrodiensten beschrieben wird. Sie können auch mehr über CORS- Header erfahren.

Steuern Sie .html Erweiterungen

Optional
Mit dem Attribut cleanUrls können Sie steuern, ob URLs die Erweiterung .html enthalten sollen oder nicht.

Bei true löscht Hosting automatisch die Erweiterung .html aus den URLs hochgeladener Dateien. Wenn der Anfrage eine .html Erweiterung hinzugefügt wird, führt Hosting eine 301 Umleitung zum gleichen Pfad durch, entfernt jedoch die .html Erweiterung.

So steuern Sie die Einbeziehung von .html in URLs, indem Sie ein cleanUrls Attribut einfügen:

"hosting": {
  // ...

  // Drops `.html` from uploaded URLs
  "cleanUrls": true
}

Kontrollieren Sie abschließende Schrägstriche

Optional
Mit dem Attribut trailingSlash können Sie steuern, ob statische Inhalts-URLs abschließende Schrägstriche enthalten sollen.

  • Wenn true , leitet Hosting URLs um, um einen abschließenden Schrägstrich hinzuzufügen.
  • Bei false leitet Hosting URLs um, um einen abschließenden Schrägstrich zu entfernen.
  • Wenn keine Angabe erfolgt, verwendet Hosting abschließende Schrägstriche nur für Verzeichnisindexdateien (z. B. about/index.html ).

So steuern Sie abschließende Schrägstriche durch Hinzufügen eines Attributs trailingSlash :

"hosting": {
  // ...

  // Removes trailing slashes from URLs
  "trailingSlash": false
}

Das Attribut trailingSlash wirkt sich nicht auf Umschreibungen dynamischer Inhalte aus, die von Cloud Functions oder Cloud Run bereitgestellt werden.

Glob-Mustervergleich

Die Konfigurationsoptionen von Firebase Hosting nutzen in großem Umfang die Glob-Mustervergleichsnotation mit extglob, ähnlich wie Git gitignore Regeln und Bower ignore behandelt. Diese Wiki-Seite ist eine ausführlichere Referenz, im Folgenden finden Sie jedoch Erläuterungen zu den auf dieser Seite verwendeten Beispielen:

  • firebase.json – Entspricht nur der Datei firebase.json im Stammverzeichnis des public Verzeichnisses

  • ** – Entspricht jeder Datei oder jedem Ordner in einem beliebigen Unterverzeichnis

  • * – Entspricht nur Dateien und Ordnern im Stammverzeichnis des public Verzeichnisses

  • **/.* – Entspricht jeder Datei, die mit beginnt . (normalerweise versteckte Dateien, wie im .git Ordner) in einem beliebigen Unterverzeichnis

  • **/node_modules/** – Entspricht jeder Datei oder jedem Ordner in einem beliebigen Unterverzeichnis eines node_modules Ordners, der sich selbst in einem beliebigen Unterverzeichnis des public Verzeichnisses befinden kann

  • **/*.@(jpg|jpeg|gif|png) – Entspricht jeder Datei in einem beliebigen Unterverzeichnis, die mit genau einer der folgenden Dateien endet: .jpg , .jpeg , .gif oder .png

Vollständiges Hosting-Konfigurationsbeispiel

Im Folgenden finden Sie ein vollständiges firebase.json Konfigurationsbeispiel für Firebase Hosting. Beachten Sie, dass eine firebase.json Datei auch Konfigurationen für andere Firebase-Dienste enthalten kann.

{
  "hosting": {

    "public": "dist/app",  // "public" is the only required attribute for Hosting

    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],

    "redirects": [ {
      "source": "/foo",
      "destination": "/bar",
      "type": 301
    }, {
      "source": "/firebase/**",
      "destination": "https://www.firebase.com",
      "type": 302
    } ],

    "rewrites": [ {
      // Shows the same content for multiple URLs
      "source": "/app/**",
      "destination": "/app/index.html"
    }, {
      // Configures a custom domain for Dynamic Links
      "source": "/promos/**",
      "dynamicLinks": true
    }, {
      // Directs a request to Cloud Functions
      "source": "/bigben",
      "function": "bigben"
    }, {
      // Directs a request to a Cloud Run containerized app
      "source": "/helloworld",
      "run": {
        "serviceId": "helloworld",
        "region": "us-central1"
      }
    } ],

    "headers": [ {
      "source": "**/*.@(eot|otf|ttf|ttc|woff|font.css)",
      "headers": [ {
        "key": "Access-Control-Allow-Origin",
        "value": "*"
      } ]
    }, {
      "source": "**/*.@(jpg|jpeg|gif|png)",
      "headers": [ {
        "key": "Cache-Control",
        "value": "max-age=7200"
      } ]
    }, {
      "source": "404.html",
      "headers": [ {
        "key": "Cache-Control",
        "value": "max-age=300"
      } ]
    } ],

    "cleanUrls": true,

    "trailingSlash": false,

    // Required to configure custom domains for Dynamic Links
    "appAssociation": "AUTO",

  }
}