Dzięki Firebase Hosting możesz skonfigurować niestandardowe zachowanie hostingu w przypadku żądań wysyłanych do Twojej witryny.
Co możesz skonfigurować w przypadku Hosting?
Określ, które pliki w lokalnym katalogu projektu chcesz wdrożyć na serwerFirebase Hosting. Więcej informacji
wyświetlać niestandardową stronę 404/Nie znaleziono; Więcej informacji
Skonfiguruj
redirects
dla przeniesionych lub usuniętych stron. Więcej informacjiSkonfiguruj
rewrites
na potrzeby:Wyświetlanie tej samej treści pod wieloma adresami URL. Dowiedz się, jak to zrobić
Wykonywanie funkcji lub uzyskiwanie dostępu do kontenera Cloud Run z poziomu adresu URL Hosting. Dowiedz się, jak: funkcja lub kontener.
Utwórz niestandardową domenę Dynamic Link. Dowiedz się, jak to zrobić
Dodaj
headers
, aby przekazać dodatkowe informacje o żądaniu lub odpowiedzi, np. o tym, jak przeglądarki powinny obsługiwać stronę i jej zawartość (uwierzytelnianie, buforowanie, kodowanie itp.). Dowiedz się, jak to zrobićSkonfiguruj przekształcanie treści na potrzeby internacjonalizacji (i18n), aby wyświetlać określone treści na podstawie preferowanego języka lub kraju użytkownika. Dowiedz się, jak to zrobić (inna strona).
Gdzie definiujesz konfigurację Hosting?
Konfigurację Firebase Hosting określasz w pliku firebase.json
. Gdy uruchomisz polecenie firebase init
, Firebase automatycznie utworzy plik firebase.json
w katalogu głównym katalogu projektu.
Poniżej znajdziesz przykład pełnej konfiguracji firebase.json
(dotyczącej tylko Firebase Hosting). Pamiętaj, że plik firebase.json
może też zawierać konfiguracje innych usług Firebase.
Za pomocą interfejsu Hosting API REST możesz sprawdzić wdrożony kontent firebase.json
.
Priorytet odpowiedzi na Hosting
Różne opcje konfiguracji Firebase Hosting opisane na tej stronie mogą się czasami pokrywać. Jeśli wystąpi konflikt, Hosting określa odpowiedź zgodnie z tym priorytetem:
- Zarezerwowane przestrzenie nazw, które zaczynają się od segmentu ścieżki
/__/*
- Skonfigurowane przekierowania
- Treści statyczne z dopasowaniem ścisłym
- Skonfigurowane przekierowania
- Niestandardowa strona 404
- Domyślna strona 404
Jeśli korzystasz z przepisów i18n, zakres dopasowania ścisłego i priorytetu obsługi 404 zostanie rozszerzony, aby uwzględnić Twoje „treści i18n”.
Określ pliki do wdrożenia
Domyślne atrybuty public
i ignore
zawarte w domyślnym pliku firebase.json
określają, które pliki w katalogu projektu powinny zostać wdrożone do projektu 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, do którego katalogu ma zostać wdrożony element Firebase Hosting. Wartość domyślna to katalog o nazwie public
, ale możesz określić ścieżkę dowolnego katalogu, o ile istnieje on w katalogu projektu.
Oto domyślna nazwa katalogu, który chcesz wdrożyć:
"hosting": {
"public": "public"
// ...
}
Możesz zmienić domyślną wartość na katalog, który chcesz wdrożyć:
"hosting": {
"public": "dist/app"
// ...
}
ignorować
Opcjonalny
Atrybut ignore
określa pliki, które mają być ignorowane podczas wdrażania. Może ona obsługiwać globy w taki sam sposób, w jaki Git obsługuje .gitignore
.
Domyślne wartości plików do zignorowania:
"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
Opcjonalnie
Możesz wyświetlić niestandardowy błąd 404 Not Found
, gdy użytkownik spróbuje uzyskać dostęp do nieistniejącej strony.
Utwórz nowy plik w katalogu public
projektu, nadaj mu nazwę 404.html
, a potem dodaj do niego niestandardową zawartość 404 Not Found
.
Firebase Hosting wyświetli zawartość tej niestandardowej strony 404.html
, jeśli przeglądarka wywoła błąd 404 Not Found
w Twojej domenie lub subdomenie.
Konfigurowanie przekierowań
Opcjonalnie
Użyj przekierowania adresu URL, aby zapobiec niedziałającym linkom w przypadku przeniesienia strony lub skrócenia adresów URL. Możesz na przykład przekierować przeglądarkę z example.com/team
na example.com/about.html
.
Określ przekierowania adresów URL, tworząc atrybut redirects
, który zawiera tablicę obiektów (nazywanych „regułami przekierowań”). W każdym regułach określ wzór adresu URL, który po dopasowaniu do ścieżki adresu URL żądania powoduje, że reguła Hosting odpowiada przekierowaniem do określonego adresu URL docelowego.
Oto podstawowa struktura atrybutu redirects
. W tym przykładzie żądania do /foo
są przekierowywane przez wysłanie nowego żądania 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.
Na początku każdego żądania Firebase Hosting porównuje wartość source
lub regex
ze wszystkimi ścieżkami adresu URL (zanim przeglądarka sprawdzi, czy w danej ścieżce znajduje się plik lub folder). Jeśli zostanie znalezione dopasowanie, serwer źródłowy Firebase Hosting wysyła odpowiedź z przekierowaniem HTTPS, informując przeglądarkę, że ma 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 powoduje zastosowanie przekierowania.Hosting
|
|
destination |
Statyczny adres URL, do którego przeglądarka powinna wysłać nowe żądanie Ten adres URL może być ścieżką względną lub bezwzględną. |
|
type |
Kod odpowiedzi HTTPS
|
Przechwytywanie segmentów adresów URL w przypadku przekierowań
Opcjonalnie
Czasami może być konieczne przechwycenie określonych segmentów wzorca adresu URL reguły przekierowania (wartość source
lub regex
), a następnie ponowne użycie tych segmentów w ścieżce destination
reguły.
Konfigurowanie przekierowań
Opcjonalnie
Użyj przepisywania, aby wyświetlać tę samą treść pod wieloma adresami URL. Modyfikacje są szczególnie przydatne w przypadku dopasowywania do wzorca, ponieważ możesz zaakceptować dowolny adres URL pasujący do wzorca, a kod po stronie klienta decyduje, co ma się wyświetlać.
Możesz też używać przekierowań do obsługi aplikacji, które do nawigacji korzystają z pushState HTML5. Gdy przeglądarka spróbuje otworzyć ścieżkę adresu URL pasującą do wzorca adresu source
lub regex
, zamiast tego otrzyma zawartość pliku pod adresem destination
.
Określ przekierowania adresów URL, tworząc atrybut rewrites
, który zawiera tablicę obiektów (nazywanych „regułami przekierowania”). W każdym regułach określ wzór adresu URL, który po dopasowaniu do ścieżki adresu URL żądania powoduje, że Hosting reaguje tak, jakby usługa otrzymała określony adres URL docelowy.
Oto podstawowa struktura atrybutu rewrites
. W tym przykładzie serwer wysyła odpowiedźindex.html
w przypadku żądań dotyczących 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, z których każda reguła musi zawierać pola z poniższej tabeli.
Firebase Hosting stosuje regułę przepisywania tylko wtedy, gdy plik lub katalog nie istnieje pod ścieżką adresu URL pasującą do określonego wzorca adresu URL source
lub regex
.
Gdy żądanie uruchamia regułę przekształcania, przeglądarka zwraca rzeczywistą zawartość pliku destination
, a nie przekierowanie HTTP.
Pole | Opis | |
---|---|---|
rewrites |
||
source (zalecane) lub regex
|
Wzorzec adresu URL, który po dopasowaniu do początkowego adresu URL żądania powoduje zastosowanie przekierowaniaHosting
|
|
destination |
Plik lokalny, który musi istnieć. Może to być ścieżka względna lub bezwzględna. |
Przekierowywanie żądań do funkcji
Możesz użyć funkcji rewrites
, aby wywołać funkcję z adresu URL Firebase Hosting. Poniższy przykład to fragment wyświetlania treści dynamicznych za pomocą Cloud Functions.
Aby np. skierować wszystkie żądania ze strony /bigben
w witrynie Hosting 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
) funkcja będzie dostępna pod tymi adresami URL:
Twoje subdomeny Firebase:
PROJECT_ID.web.app/bigben
iPROJECT_ID.firebaseapp.com/bigben
dowolne połączone domeny niestandardowe:
CUSTOM_DOMAIN/bigben
Podczas przekierowywania żądań do funkcji z Hosting obsługiwane są metody żądań HTTP: GET
, POST
, HEAD
, PUT
, DELETE
, PATCH
i OPTIONS
.
Inne metody, takie jak REPORT
lub PROFIND
, nie są obsługiwane.
Żądania kierowane bezpośrednio do kontenera Cloud Run
Za pomocą rewrites
możesz uzyskać dostęp do kontenera Cloud Run z poziomu adresu URL Firebase Hosting. Poniższy przykład to fragment wyświetlania treści dynamicznych za pomocą Cloud Run.
Aby na przykład kierować wszystkie żądania ze strony /helloworld
w witrynie Hosting do uruchamiania i uruchamiania instancji kontenera helloworld
:
"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 przekierowania i wdrożeniu na Firebase (za pomocą firebase deploy
) obraz kontenera będzie dostępny pod następującymi adresami URL:
Twoje subdomeny Firebase:
PROJECT_ID.web.app/helloworld
iPROJECT_ID.firebaseapp.com/helloworld
dowolne połączone domeny niestandardowe:
CUSTOM_DOMAIN/helloworld
Podczas przekierowywania żądań do kontenerów Cloud Run z Hosting obsługiwane są metody żądań HTTP GET
, POST
, HEAD
, PUT
, DELETE
, PATCH
i OPTIONS
. Inne metody, takie jak REPORT
czy PROFIND
, nie są obsługiwane.
Aby uzyskać najlepszą wydajność, umieść usługę Cloud Run w usługach Hosting w tych regionach:
us-west1
us-central1
us-east1
europe-west1
asia-east1
Przekierowania z formatu Hosting na format Cloud Run są obsługiwane w tych regionach:
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
Utwórz domenę niestandardową Dynamic Links
Możesz użyć rewrites
, aby utworzyć domenę niestandardową Dynamic Links. Szczegółowe informacje o konfigurowaniu domeny niestandardowej w usłudze Dynamic Links znajdziesz w dokumentacji Dynamic Links.
Używaj domeny niestandardowej tylko do obsługi 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 } ] }
Określ prefiksy ścieżek domen niestandardowych, których chcesz używać 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 } ] }
Aby skonfigurować Dynamic Links w pliku firebase.json
, musisz wykonać te czynności:
Pole | Opis | |
---|---|---|
appAssociation |
Trzeba ustawić wartość
|
|
rewrites |
||
source |
Ścieżka, której chcesz użyć w przypadku Dynamic Links W przeciwieństwie do reguł, które przepisują ścieżki na adresy URL, reguły przepisywania dla Dynamic Links nie mogą zawierać wyrażeń regularnych. |
|
dynamicLinks |
Trzeba ustawić wartość true
|
Skonfiguruj nagłówki
Opcjonalne
Nagłówki pozwalają klientowi i serwerowi przekazać dodatkowe informacje wraz z żądaniem lub odpowiedzią. Niektóre zestawy nagłówków mogą wpływać na sposób obsługi strony i jej zawartości przez przeglądarkę, w tym na kontrolę dostępu, uwierzytelnianie, przechowywanie w pamięci podręcznej i kodowanie.
Określ niestandardowe nagłówki odpowiedzi dotyczące konkretnego pliku, tworząc atrybut headers
, który zawiera tablicę obiektów nagłówka. W każdym obiekcie podaj wzór adresu URL, który po dopasowaniu do ścieżki adresu URL żądania powoduje, że Hosting stosuje określone nagłówki odpowiedzi niestandardowej.
Oto podstawowa struktura atrybutu headers
. W tym przykładzie nagłówek CORS jest stosowany do 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, z których każda musi zawierać pola podane w tabeli poniżej.
Pole | Opis | ||
---|---|---|---|
headers |
|||
source (zalecane) lub regex
|
Wzorzec adresu URL, który po dopasowaniu do początkowego adresu URL żądania powoduje Hosting zastosowanie nagłówka niestandardowego
Aby utworzyć nagłówek dopasowujący się do niestandardowej strony 404, użyj wartości |
||
tablica (pod)headers |
niestandardowe nagłówki, które Hosting stosuje do ścieżki żądania. Każdy podnagłówek musi zawierać parę |
||
key |
Nazwa nagłówka, np. Cache-Control |
||
value |
Wartość nagłówka, np. max-age=7200 |
Więcej informacji o usłudze Cache-Control
znajdziesz w sekcji Hosting dotyczącej udostępniania treści dynamicznych i hostowania mikroserwisów. Możesz też dowiedzieć się więcej o nagłówkach CORS.
Zarządzanie rozszerzeniami: .html
Opcjonalny
Atrybut cleanUrls
pozwala określić, czy adresy URL powinny zawierać rozszerzenie .html
.
Jeśli true
, Hosting automatycznie usuwa rozszerzenie .html
z adresów URL przesłanych plików. Jeśli w żądaniu zostało dodane rozszerzenie .html
, Hosting wykonuje przekierowanie 301
do tej samej ścieżki, ale bez rozszerzenia .html
.
Aby kontrolować uwzględnianie atrybutu .html
w adresach URL, użyj atrybutu cleanUrls
:
"hosting": {
// ...
// Drops `.html` from uploaded URLs
"cleanUrls": true
}
sterowanie ukośnikami na końcu,
Opcjonalny
Atrybut trailingSlash
pozwala określić, czy adresy URL treści statycznych mają zawierać ukośniki.
- Gdy
true
, Hosting przekierowuje adresy URL, aby dodać końcową ukośnicę. - Gdy
false
, Hosting przekierowuje adresy URL tak, aby usunąć na końcu ukośnik. - Jeśli nie jest określone, Hosting używa tylko ukośników końcowych w plikach indeksu katalogu (np.
about/index.html
).
Oto jak kontrolować ukośniki końcowe przez dodanie atrybutu trailingSlash
:
"hosting": {
// ...
// Removes trailing slashes from URLs
"trailingSlash": false
}
Atrybut trailingSlash
nie ma wpływu na przepisywanie treści dynamicznych dostarczanych przez Cloud Functions lub Cloud Run.
Dopasowywanie do wzorca glob
Opcje konfiguracji Firebase Hosting wykorzystują w dużym stopniu notację dopasowania wzorców glob z extglob, podobnie jak w przypadku Git obsługuje reguły gitignore
, a Bower obsługuje reguły ignore
.
Ta strona Wiki zawiera bardziej szczegółowe informacje, ale poniżej znajdziesz wyjaśnienia przykładów użytych na tej stronie:
firebase.json
– pasuje tylko do plikufirebase.json
w katalogu głównympublic
.**
– pasuje do dowolnego pliku lub folderu w dowolnym podkatalogu.*
– pasuje tylko do plików i folderów w katalogu głównym katalogupublic
.**/.*
– pasuje do każdego pliku zaczynającego się od.
(zwykle ukryte pliki, na przykład w folderze.git
) w dowolnym katalogu podrzędnym.**/node_modules/**
– pasuje do dowolnego pliku lub folderu w dowolnym podkatalogu folderunode_modules
, który może znajdować się w dowolnym podkatalogu katalogupublic
.**/*.@(jpg|jpeg|gif|png)
– dopasowuje się do dowolnego pliku w dowolnym podkatalogu, który kończy się dokładnie jednym z tych elementów:.jpg
,.jpeg
,.gif
lub.png
.
Przykładowa pełna konfiguracja Hosting
Poniżej znajdziesz przykład pełnej konfiguracji firebase.json
w przypadku 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",
}
}