Skonfiguruj zachowanie Hostingu

Firebase Hosting umożliwia skonfigurowanie niestandardowego działania hostingu do Twojej witryny.

Co możesz skonfigurować w usłudze Hosting?

  • Określ, które pliki w lokalnym katalogu projektu chcesz wdrożyć Firebase Hosting Więcej informacji

  • Wyświetla dostosowaną stronę 404/nie znaleziono. Więcej informacji

  • Skonfiguruj redirects dla przeniesionych lub usuniętych stron. Więcej informacji

  • Skonfiguruj usługę rewrites w dowolnym z tych celów:

    • Wyświetlaj tę samą treść pod wieloma adresami URL. Więcej informacji

    • Obsługuj funkcję lub uzyskaj dostęp do kontenera Cloud Run z poziomu Hosting Adres URL. Dowiedz się, jak funkcji lub container

    • Utwórz niestandardową domenę Dynamic Link. Więcej informacji

  • Dodaj headers, aby przekazać dodatkowe informacje o żądaniu lub odpowiedź, np. jak przeglądarki powinny obsługiwać stronę i jej zawartość (uwierzytelnianie, pamięć podręczna, kodowanie itp.). Więcej informacji

  • Dostosowywanie treści internacjonalizacji (i18n) w celu wyświetlania konkretnych treści zgodnie z preferowanym językiem i/lub krajem użytkownika. Dowiedz się, jak to zrobić (inna strona).

Gdzie możesz zdefiniować konfigurację usługi Hosting?

Konfigurację Firebase Hosting określasz w firebase.json. Firebase automatycznie tworzy plik firebase.json w katalogu głównym projektu po uruchomieniu firebase init.

Na stronie przykład pełnej konfiguracji firebase.json (obejmujące tylko Firebase Hosting) na dole tej strony. Pamiętaj, że firebase.json plik może też zawierać konfiguracje innych usług Firebase.

Wdrożoną treść firebase.json możesz sprawdzić za pomocą Hosting API typu REST.

Priorytet Hosting odpowiedzi

Opcje konfiguracji usługi Firebase Hosting opisane na tej stronie mogą się czasami pokrywać. Jeśli wystąpi konflikt, Hosting określa jego wartość według priorytetu w następujący sposób:

  1. Zarezerwowane przestrzenie nazw, które zaczynają się od segmentu ścieżki /__/*
  2. Skonfigurowane przekierowania
  3. Ścisłe dopasowanie treści statycznej
  4. Skonfigurowane przepisy
  5. Strona Niestandardowa strona 404
  6. Domyślna strona 404
.

Jeśli korzystasz z funkcji i18n rewrite, dokładny odpowiednik i kolejności priorytetu błędów 404, aby uwzględnić treści”.

Określ pliki do wdrożenia

Uwzględnione są atrybuty domyślne – public i ignore w domyślnym pliku firebase.json określają, które pliki w katalogu projektu należy wdrożyć w projekcie Firebase.

Domyślna konfiguracja hosting w pliku firebase.json wygląda tak:

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

publiczna

Wymagany
Atrybut public określa katalog, w którym nastąpi wdrożenie Firebase Hosting Wartość domyślna to katalog o nazwie public, ale może podać ścieżkę dowolnego katalogu, jeśli istnieje on w projekcie katalogu.

Poniżej znajduje się domyślna określona nazwa katalogu do wdrożenia:

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

  // ...
}

Możesz zmienić wartość domyślną na katalog, który chcesz wdrożyć:

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

  // ...
}

ignoruj

Opcjonalny
Atrybut ignore określa pliki, które mają być ignorowane podczas wdrażania. Może to zająć globs w taki sam sposób, Git obsługuje język .gitignore.

Te wartości domyślne, które mają być ignorowane przez pliki:

"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
  ]
}

Dostosowywanie strony 404/nie znaleziono

Opcjonalny
Możesz wyświetlać niestandardowy błąd 404 Not Found, gdy użytkownik próbuje uzyskać dostęp do strony które nie istnieją.

Utwórz nowy plik w katalogu public projektu i nadaj mu nazwę 404.html, a następnie dodaj niestandardową zawartość z 404 Not Found do tego pliku.

Firebase Hosting wyświetli zawartość tej niestandardowej strony 404.html, jeśli przeglądarka powoduje wystąpienie błędu 404 Not Found w Twojej domenie lub subdomenie.

Konfigurowanie przekierowań

Opcjonalny
Użyj przekierowania adresu URL, aby zapobiec uszkodzonym linkom po przeniesieniu strony. lub skracać adresy URL. Możesz na przykład przekierować przeglądarkę z example.com/team do example.com/about.html.

Określ przekierowania URL przez utworzenie atrybutu redirects zawierającego tablicę obiektów (nazywanych „regułami przekierowania”). W każdej regule określ wzorzec adresu URL, który jeśli pasuje do ścieżki adresu URL żądania, powoduje, że Hosting odpowiada z przekierowaniem na określony docelowy adres URL.

Oto podstawowa struktura atrybutu redirects. Ten przykład przekierowuje /foo, przesyłając nową prośbę do /bar.

"hosting": {
  // ...

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

Atrybut redirects zawiera tablicę reguł przekierowania, przy czym każda reguła musi zawierać pola z poniższej tabeli.

Firebase Hosting porównuje wartość source lub regex ze wszystkimi adresami URL ścieżek na początku każdego żądania (zanim przeglądarka ustali, czy znajduje się plik lub folder pod tą ścieżką). Jeśli znajdziemy dopasowanie, Serwer pierwotny Firebase Hosting wysyła odpowiedź przekierowania HTTPS informującą aby wysłać nowe żądanie pod adresem URL destination.

Pole Opis
redirects
source (zalecane)
lub regex

Wzorzec adresu URL, który po dopasowaniu do początkowego adresu URL żądania aktywuje Hosting, aby zastosować przekierowanie

destination

Statyczny adres URL, pod którym przeglądarka powinna wysłać nowe żądanie

Może to być ścieżka względna lub bezwzględna.

type

Kod odpowiedzi HTTPS

  • W przypadku opcji „Przeniesiono na stałe” użyj typu 301
  • Jako wartość „Znaleziono” użyj typu 302 (Tymczasowe przekierowanie)

Rejestrowanie segmentów adresów URL na potrzeby przekierowań

Opcjonalny
Czasami może być konieczne przechwycenie określonych segmentów adresu URL reguły przekierowania (wartość source lub regex), użyj tych segmentów ponownie ścieżki destination reguły.

Skonfiguruj przepisy

Opcjonalny
Użyj przepisywania, aby wyświetlać tę samą treść pod różnymi adresami URL. Przeredagowane wersje szczególnie przydatną w przypadku dopasowywania do wzorca, ponieważ można zaakceptować dowolny adres URL, pasuje do wzorca i niech kod po stronie klienta decyduje, co ma się wyświetlać.

Możesz również użyć przeredagowania, aby umożliwić obsługę aplikacji, które używają PushState w HTML5 do nawigacji. Gdy przeglądarka próbuje otworzyć ścieżkę adresu URL pasującą do source lub regex, przeglądarka otrzyma parametr jest dostępna pod adresem URL destination.

Określ przepisywanie adresów URL, tworząc atrybut rewrites zawierający tablicę obiektów (nazywanych „regułami przepisywania”). W każdej regule określ wzorzec adresu URL, który jeśli pasuje do ścieżki adresu URL żądania, powoduje, że Hosting odpowiada, jak gdyby usługa otrzymała określony docelowy adres URL.

Oto podstawowa struktura atrybutu rewrites. Ten przykład udostępnia index.html w przypadku żądań plików lub katalogów, które nie istnieją.

"hosting": {
  // ...

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

Atrybut rewrites zawiera tablicę reguł przepisywania, gdzie każda reguła musi zawierać pola z poniższej tabeli.

Firebase Hosting stosuje regułę przepisywania tylko wtedy, gdy plik lub katalog nie istnieją w ścieżce adresu URL pasującej do określonego wzorca adresu URL source lub regex. Gdy żądanie aktywuje regułę przepisywania, przeglądarka zwraca rzeczywistą treść. określonego pliku destination zamiast przekierowania HTTP.

Pole Opis
rewrites
source (zalecane)
lub regex

Wzorzec adresu URL, który po dopasowaniu do początkowego adresu URL żądania aktywuje Hosting, aby zastosować przeredagowanie

destination

Musi istnieć plik lokalny.

Może to być ścieżka względna lub bezwzględna.

Bezpośrednie żądania do funkcji

Za pomocą rewrites możesz obsługiwać funkcję z adresu URL Firebase Hosting. następujący przykład to fragment z wyświetlania treści dynamicznych za pomocą Cloud Functions.

Aby np. kierować wszystkie żądania ze strony /bigben na Hosting witryny do wykonania funkcji bigben:

"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)
    }
  } ]
}

Po dodaniu tej reguły przepisywania i wdrożeniu jej w Firebase (przy użyciu firebase deploy), Twoja funkcja jest dostępna pod tymi adresami URL:

  • Twoje subdomeny Firebase:
    PROJECT_ID.web.app/bigben i PROJECT_ID.firebaseapp.com/bigben

  • Wszystkie połączone domeny niestandardowe:
    CUSTOM_DOMAIN/bigben

Podczas przekierowywania żądań do funkcji z użyciem Hosting obsługiwane żądanie HTTP to GET, POST, HEAD, PUT, DELETE, PATCH i OPTIONS. Inne metody, takie jak REPORT czy PROFIND, nie są obsługiwane.

Bezpośrednie żądania do kontenera Cloud Run

Za pomocą rewrites możesz uzyskać dostęp do kontenera Cloud Run z poziomu Firebase Hosting. Poniższy przykład jest fragmentem wyświetlania treści dynamicznych za pomocą Cloud Run.

Aby np. kierować wszystkie żądania ze strony /helloworld na Hosting witryna do uruchamiania i uruchamiania kontenera helloworld instancja:

"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)
   }
 } ]
}

Po dodaniu tej reguły przepisywania i wdrożeniu jej w Firebase (przy użyciu firebase deploy), obraz kontenera jest dostępny pod tymi adresami URL:

  • Twoje subdomeny Firebase:
    PROJECT_ID.web.app/helloworld i PROJECT_ID.firebaseapp.com/helloworld

  • Wszystkie połączone domeny niestandardowe:
    CUSTOM_DOMAIN/helloworld

Podczas przekierowywania żądań do Cloud Run kontenerów z parametrem Hosting: obsługiwane metody żądań HTTP to GET, POST, HEAD, PUT, DELETE, PATCH i OPTIONS. Inne metody, takie jak REPORT czy PROFIND, nie są dozwolone obsługiwane.

Aby uzyskać najlepszą wydajność, kolokuj usługę Cloud Run z Hosting, korzystając z tych regionów:

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

Przepisywanie na Cloud Run z: Hosting jest obsługiwane w te regiony:

  • 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

Aby utworzyć domenę niestandardową Dynamic Links, możesz użyć adresu rewrites. Odwiedź Dynamic Links dokumentacji ze szczegółowymi informacjami na temat skonfigurować domenę niestandardową dla: Dynamic Links.

  • Użyj własnej domeny tylko w domenie Dynamic 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
      } ]
    }
    
  • Podaj niestandardowe prefiksy ścieżek domeny, które mają być używane w przypadku Dynamic Links

    "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
      } ]
    }
    

Skonfigurowanie zasady Dynamic Links w pliku firebase.json wymaga tych elementów:

Pole Opis
appAssociation

Trzeba ustawić wartość AUTO

  • Jeśli nie umieścisz tego atrybutu w swojej konfiguracji, domyślna wartość dla appAssociation to AUTO.
  • Jeśli ustawisz ten atrybut na wartość AUTO, Hosting może: dynamicznie generuj assetlinks.json oraz apple-app-site-association plików, gdy o których poproszono.
rewrites
source

Ścieżka, której chcesz użyć w przypadku elementu Dynamic Links

W przeciwieństwie do reguł, które przepisują ścieżki do adresów URL, reguły przepisywania obejmują Dynamic Links nie może zawierać wyrażeń regularnych.

dynamicLinks Trzeba ustawić wartość true

Skonfiguruj nagłówki

Opcjonalny
Nagłówki umożliwiają klientowi i serwerowi przekazywanie dodatkowych informacji z prośbą lub odpowiedzią. Niektóre zestawy nagłówków mogą wpływać na działanie przeglądarki obsługuje stronę i jej zawartość, w tym kontrolę dostępu, uwierzytelnianie buforowanie i kodowanie.

Aby określić niestandardowe nagłówki odpowiedzi zależnie od pliku, utwórz atrybut headers który zawiera tablicę obiektów nagłówka. W każdym obiekcie określ wzorzec adresu URL który po dopasowaniu do ścieżki adresu URL żądania powoduje, że Hosting stosuje tag określonych niestandardowych nagłówków odpowiedzi.

Oto podstawowa struktura atrybutu headers. W tym przykładzie zastosowano Nagłówek CORS dla wszystkich plików czcionek.

"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": "*"
    } ]
  } ]
}

Atrybut headers zawiera tablicę definicji, przy czym każda definicja musi zawierać pola z poniższej tabeli.

Pole Opis
headers
source (zalecane)
lub regex

Wzorzec adresu URL, który po dopasowaniu do początkowego adresu URL żądania aktywuje Hosting, aby zastosować nagłówek niestandardowy

Aby utworzyć nagłówek pasujący do Niestandardowa strona 404, użyj 404.html jako Wartość source lub regex.

tablica (sub-)headers

Niestandardowe nagłówki, które Hosting stosuje do ścieżki żądania

Każdy podnagłówek musi zawierać element Pary key i value (zobacz dwa następne wiersze).

key Nazwa nagłówka, np. Cache-Control
value Wartość nagłówka, np. max-age=7200

Więcej informacji o Cache-Control znajdziesz w Sekcja Hosting opisująca wyświetlanie treści dynamicznych i hostingu do tworzenia mikroserwisów. Więcej informacji na temat Nagłówki CORS.

Zarządzaj rozszerzeniami .html

Opcjonalny
Atrybut cleanUrls pozwala określić, czy adresy URL powinien zawierać rozszerzenie .html.

Gdy true, Hosting automatycznie usuwa rozszerzenie .html z przesłanego pliku adresów URL plików. Jeśli w żądaniu zostanie dodane rozszerzenie .html, parametr Hosting uzyskuje skuteczność 301 przekierowuje na tę samą ścieżkę, ale eliminuje rozszerzenie .html.

Jak określić, czy .html ma być uwzględniane w adresach URL, umieszczając w adresie URL parametr Atrybut cleanUrls:

"hosting": {
  // ...

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

Steruj końcowym ukośnikami

Opcjonalny
Atrybut trailingSlash pozwala określić, czy reklama ma być statyczna adresy URL treści powinny zawierać ukośniki końcowe.

  • Gdy true, Hosting przekierowuje adresy URL, aby dodać na końcu ukośnik.
  • Gdy false, Hosting przekierowuje adresy URL tak, aby usunąć na końcu ukośnik.
  • Jeśli nie określono inaczej, Hosting używa ukośników tylko do określenia indeksu katalogu (np. about/index.html).

Aby kontrolować końcowe ukośniki, dodaj atrybut trailingSlash:

"hosting": {
  // ...

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

Atrybut trailingSlash nie ma wpływu na przepisywanie treści dynamicznych obsługiwane przez: Cloud Functions lub Cloud Run.

Dopasowywanie wzorców glob

Opcje konfiguracji Firebase Hosting wykorzystują dopasowywanie wzorców glob z notacją z extglob, podobny do tego, jak obsługuje się Git gitignore reguły i Bower obsługuje reguły ignore. Ta strona wiki zawiera bardziej szczegółowe informacje, , ale ich przykłady podano na tej stronie:

  • firebase.json – pasuje tylko do pliku firebase.json w katalogu głównym z katalogu public

  • ** – dopasowuje dowolny plik lub folder w dowolnym podkatalogu.

  • * – dopasowuje tylko pliki i foldery w katalogu głównym Katalog public

  • **/.* – dopasowuje każdy plik rozpoczynający się od . (zwykle pliki ukryte, np. .git) w dowolnym podkatalogu,

  • **/node_modules/** – dopasowuje dowolny plik lub folder w dowolnej lokalizacji folderu node_modules, który może się znajdować w dowolnym podkatalogu public

  • **/*.@(jpg|jpeg|gif|png) – dopasowuje dowolny plik w przypadku dowolnego pliku z podkatalogiem, który kończy się dokładnie jednym z tych ciągów: .jpg, .jpeg, .gif lub .png

Przykład pełnej konfiguracji Hosting

Oto pełny przykład konfiguracji firebase.json dla Firebase Hosting Pamiętaj, że plik firebase.json może też zawierać konfiguracje innych usług Firebase.

{
  "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",

  }
}