Firebase Hosting ile sitenize gelen istekler için özelleştirilmiş barındırma davranışını yapılandırabilirsiniz.
Hosting için neleri yapılandırabilirsiniz?
Yerel proje dizininizde Firebase Hosting'ye dağıtmak istediğiniz dosyaları belirtin. Nasıl yapacağınızı öğrenin.
Özelleştirilmiş bir 404/Bulunamadı sayfası sunun. Bunu nasıl yapacağınızı öğrenin.
Taşınmış veya silinmiş sayfalar için
redirects
ayarlayın. Bunu nasıl yapacağınızı öğrenin.rewrites
'ü aşağıdaki amaçlardan herhangi biri için ayarlayın:Birden fazla URL için aynı içeriği gösterin. Nasıl yapılacağını öğrenin.
Bir işlevi yayınlama veya Hosting URL'sinden Cloud Run kapsayıcıya erişim İşlev veya kapsayıcı hakkında bilgi edinin.
Özel alan oluşturun Dynamic Link. Nasıl yapacağınızı öğrenin.
Tarayıcıların sayfayı ve içeriğini nasıl işleyeceği (kimlik doğrulama, önbelleğe alma, kodlama vb.) gibi bir istek veya yanıtla ilgili ek bilgileri iletmek için
headers
ekleyin. Bunu nasıl yapacağınızı öğrenin.Kullanıcının dil tercihine ve/veya ülkesine göre belirli içeriği sunmak için uluslararasılaştırma (i18n) yeniden yazma işlemlerini ayarlayın. Nasıl yapacağınızı öğrenin (farklı sayfa).
Hosting yapılandırmanızı nerede tanımlarsınız?
Firebase Hosting yapılandırmanızı firebase.json
dosyanızda tanımlarsınız. firebase init
komutunu çalıştırdığınızda Firebase, firebase.json
dosyanızı proje dizininizin kökünde otomatik olarak oluşturur.
Bu sayfanın en altında, tam firebase.json
yapılandırma örneği (yalnızca Firebase Hosting'ı kapsar) bulabilirsiniz. firebase.json
dosyalarının diğer Firebase hizmetleri için yapılandırmalar da içerebileceğini unutmayın.
Dağıtılan firebase.json
içeriğini Hosting REST API kullanarak kontrol edebilirsiniz.
Hosting yanıtlarının öncelik sırası
Bu sayfada açıklanan farklı Firebase Hosting yapılandırma seçenekleri bazen çakışabilir. Çakışma varsa Hosting, yanıtını aşağıdaki öncelik sırasını kullanarak belirler:
/__/*
yol segmentiyle başlayan ayrılmış ad alanları- Yapılandırılmış yönlendirmeler
- Tam eşleşen statik içerik
- Yapılandırılmış yeniden yazmalar
- Özel 404 sayfası
- Varsayılan 404 sayfası
i18n yeniden yazma özelliğini kullanıyorsanız tam eşleme ve 404 işleme öncelik sırası, "i18n içeriğinizi" içerecek şekilde kapsam olarak genişletilir.
Dağıtılacak dosyaları belirtme
Varsayılan firebase.json
dosyasına dahil edilen varsayılan özellikler (public
ve ignore
), proje dizininizdeki hangi dosyaların Firebase projenize dağıtılması gerektiğini tanımlar.
firebase.json
dosyasındaki varsayılan hosting
yapılandırması şu şekildedir:
"hosting": {
"public": "public", // the only required attribute for Hosting
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
]
}
herkese açık
Zorunlu
public
özelliği, Firebase Hosting dizinine hangi dizinin dağıtılacağını belirtir. Varsayılan değer public
adlı bir dizindir ancak proje dizininizde bulunduğu sürece herhangi bir dizinin yolunu belirtebilirsiniz.
Aşağıda, dağıtılacak dizinin belirtilen varsayılan adı verilmiştir:
"hosting": {
"public": "public"
// ...
}
Varsayılan değeri, dağıtmak istediğiniz dizin olarak değiştirebilirsiniz:
"hosting": {
"public": "dist/app"
// ...
}
yoksay
İsteğe bağlı
ignore
özelliği, dağıtımda yoksayılacak dosyaları belirtir. Git'in .gitignore
ile aynı şekilde toplama işlemlerini gerçekleştirebilir.
Yoksayılacak dosyaların varsayılan değerleri şunlardır:
"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
]
}
404/Bulunamadı sayfasını özelleştirme
İsteğe bağlı
Kullanıcı var olmayan bir sayfaya erişmeye çalıştığında özel bir 404 Not Found
hatası yayınlayabilirsiniz.
Projenizin public
dizininde yeni bir dosya oluşturun, dosyayı 404.html
olarak adlandırın ve ardından özel 404 Not Found
içeriğinizi dosyaya ekleyin.
Bir tarayıcı alan adınızda veya alt alan adınızda 404 Not Found
hatası tetiklerse Firebase Hosting bu özel 404.html
sayfasının içeriğini gösterir.
Yönlendirmeleri yapılandırma
İsteğe bağlı
Bir sayfayı taşıdıysanız bozuk bağlantıları önlemek veya URL'leri kısaltmak için URL yönlendirmesi kullanın. Örneğin, bir tarayıcıyı example.com/team
adresinden example.com/about.html
adresine yönlendirebilirsiniz.
Bir nesne dizisi ("yönlendirme kuralları" olarak adlandırılır) içeren bir redirects
özelliği oluşturarak URL yönlendirmelerini belirtin. Her kuralda, istek URL'si yoluyla eşleşirse Hosting'yi, belirtilen hedef URL'ye yönlendirmeyle yanıt verecek şekilde tetikleyen bir URL kalıbı belirtin.
Bir redirects
özelliğinin temel yapısını burada görebilirsiniz. Bu örnekte, /bar
adresine yeni bir istek göndererek istekler /foo
adresine yönlendirilmektedir.
"hosting": {
// ...
// Returns a permanent redirect to "/bar" for requests to "/foo" (but not "/foo/**")
"redirects": [ {
"source": "/foo",
"destination": "/bar",
"type": 301
} ]
}
redirects
özelliği, her kuralın aşağıdaki tablodaki alanları içermesi gereken bir yönlendirme kuralı dizisi içerir.
Firebase Hosting, source
veya regex
değerini her isteğin başında (tarayıcı bu yolda dosya veya klasör olup olmadığını belirlemeden önce) tüm URL yollarıyla karşılaştırır. Bir eşleşme bulunursa Firebase Hosting kaynak sunucusu, tarayıcıya destination
URL'sinde yeni bir istek göndermesini söyleyen bir HTTPS yönlendirme yanıtı gönderir.
Alan | Açıklama | |
---|---|---|
redirects |
||
source (önerilir) veya regex
|
İlk istek URL'siyle eşleşirse yönlendirmeyi uygulamak için Hosting'ü tetikleyen bir URL kalıbı
|
|
destination |
Tarayıcının yeni istek göndermesi gereken statik URL Bu URL, göreli veya mutlak yol olabilir. |
|
type |
HTTPS yanıt kodu
|
Yönlendirmeler için URL segmentlerini yakalama
İsteğe bağlı
Bazen, yönlendirme kuralının URL kalıbının (source
veya regex
değeri) belirli segmentlerini yakalamanız ve ardından bu segmentleri kuralın destination
yolunda yeniden kullanmanız gerekebilir.
Yeniden yazmaları yapılandırma
İsteğe bağlı
Birden çok URL'de aynı içeriği göstermek için yeniden yazma özelliğini kullanın. Kalıpla eşleşen herhangi bir URL'yi kabul edebileceğiniz ve neyin gösterileceğine istemci taraflı kod karar vereceği için yeniden yazmalar özellikle kalıp eşleştirmede kullanışlıdır.
Navigasyon için HTML5 pushState kullanan uygulamaları desteklemek amacıyla da yeniden yazma özelliğini kullanabilirsiniz. Bir tarayıcı, belirtilen source
veya regex
URL kalıbıyla eşleşen bir URL yolunu açmaya çalıştığında tarayıcıya bunun yerine destination
URL'sindeki dosyanın içeriği verilir.
Bir nesne dizisi ("yeniden yazma kuralları" olarak adlandırılır) içeren bir rewrites
özelliği oluşturarak URL yeniden yazmalarını belirtin. Her kuralda, istek URL yolu ile eşleşirse Hosting'ü, hizmete belirtilen hedef URL verilmiş gibi yanıt vermesi için tetikleyen bir URL kalıbı belirtin.
rewrites
özelliğinin temel yapısı aşağıda verilmiştir. Bu örnek, mevcut olmayan dosyalara veya dizinlere yönelik istekler için index.html
yayınlanır.
"hosting": {
// ...
// Serves index.html for requests to files or directories that do not exist
"rewrites": [ {
"source": "**",
"destination": "/index.html"
} ]
}
rewrites
özelliği, her birinin aşağıdaki tablodaki alanları içermesi gereken bir yeniden yazma kuralı dizisi içerir.
Firebase Hosting, yalnızca belirtilen source
veya regex
URL kalıbıyla eşleşen bir URL yolunda dosya veya dizin yoksa yeniden yazma kuralını uygular.
Bir istek bir yeniden yazma kuralını tetiklediğinde, tarayıcı bir HTTP yönlendirmesi yerine belirtilen destination
dosyasının gerçek içeriğini döndürür.
Alan | Açıklama | |
---|---|---|
rewrites |
||
source (önerilir) veya regex
|
İlk istek URL'siyle eşleşirse yeniden yazma işlemini uygulamak için Hosting'ü tetikleyen bir URL kalıbı
|
|
destination |
Var olması gereken yerel bir dosya Bu URL, göreli veya mutlak yol olabilir. |
İşleve doğrudan istekler
Firebase Hosting URL'sinden bir işlev sunmak için rewrites
kullanabilirsiniz. Aşağıdaki örnek, Cloud Functions kullanarak dinamik içerik sunma konulu bir alıntıdır.
Örneğin, Hosting sitenizdeki /bigben
sayfasından gelen tüm istekleri bigben
işlevini yürütecek şekilde yönlendirmek için:
"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)
}
} ]
}
Bu yeniden yazma kuralını ekleyip Firebase'e dağıttıktan (firebase deploy
kullanarak) sonra işlevinize aşağıdaki URL'ler üzerinden erişilebilir:
Firebase alt alan adlarınız:
PROJECT_ID.web.app/bigben
vePROJECT_ID.firebaseapp.com/bigben
Bağlı tüm özel alanlar:
CUSTOM_DOMAIN/bigben
İstekleri Hosting içeren işlevlere yönlendirirken desteklenen HTTP istek yöntemleri GET
, POST
, HEAD
, PUT
, DELETE
, PATCH
ve OPTIONS
'tır.
REPORT
veya PROFIND
gibi diğer yöntemler desteklenmez.
İstekleri bir Cloud Run kapsayıcısına yönlendirme
Firebase Hosting URL'sinden Cloud Run kapsayıcıya erişmek için rewrites
'ü kullanabilirsiniz. Aşağıdaki örnek, Cloud Run kullanarak dinamik içerik yayınlama ile ilgili bir alıntıdır.
Örneğin, Hosting sitenizdeki /helloworld
sayfasından gelen tüm istekleri helloworld
kapsayıcı örneğinin başlatılmasını ve çalıştırılmasını tetiklemek üzere yönlendirmek için:
"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)
}
} ]
}
Bu yeniden yazma kuralını ekleyip Firebase'e dağıttıktan (firebase deploy
kullanarak) sonra kapsayıcı resminize aşağıdaki URL'ler üzerinden erişilebilir:
Firebase alt alan adlarınız:
PROJECT_ID.web.app/helloworld
vePROJECT_ID.firebaseapp.com/helloworld
Bağlı tüm özel alanlar:
CUSTOM_DOMAIN/helloworld
İstekleri Hosting ile Cloud Run kapsayıcılarına yönlendirirken desteklenen HTTP istek yöntemleri GET
, POST
, HEAD
, PUT
, DELETE
, PATCH
ve OPTIONS
'dir. REPORT
veya PROFIND
gibi diğer yöntemler desteklenmez.
En iyi performans için Cloud Run hizmetinizi aşağıdaki bölgeleri kullanarak Hosting ile birlikte barındırın:
us-west1
us-central1
us-east1
europe-west1
asia-east1
Hosting öğesinden Cloud Run öğesine yeniden yazma işlemleri şu bölgelerde desteklenir:
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
Dynamic Links özel alan adını oluştur
Dynamic Links özel alanını oluşturmak için rewrites
'ü kullanabilirsiniz. Dynamic Links için özel alan oluşturma hakkında ayrıntılı bilgi edinmek için Dynamic Links belgelerini inceleyin.
Özel alanınızı yalnızca Dynamic Links için kullanın
"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 } ] }
Dynamic Links için kullanılacak özel alan yolu ön eklerinin belirtilmesi
"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 } ] }
firebase.json
dosyanızda Dynamic Links yapılandırması için aşağıdakiler gerekir:
Alan | Açıklama | |
---|---|---|
appAssociation |
|
|
rewrites |
||
source |
Dynamic Links için kullanmak istediğiniz yol URL'lerin yollarını yeniden yazan kuralların aksine, Dynamic Links için yeniden yazma kuralları normal ifadeler içeremez. |
|
dynamicLinks |
true olarak ayarlanmalıdır
|
Üstbilgileri yapılandırma
İsteğe bağlı
Başlıklar, istemcinin ve sunucunun bir istek veya yanıtla birlikte ek bilgi iletmesine olanak tanır. Bazı üstbilgi grupları, tarayıcının sayfayı ve içeriğini işleme şeklini (erişim denetimi, kimlik doğrulama, önbelleğe alma ve kodlama dahil) etkileyebilir.
Başlık nesneleri dizisi içeren bir headers
özelliği oluşturarak özel, dosyaya özgü yanıt başlıkları belirtin. Her nesnede, istek URL yoluyla eşleştirilmesi durumunda, belirtilen özel yanıt başlıklarını uygulamak için Hosting öğesini tetikleyen bir URL kalıbı belirtin.
headers
özelliğinin temel yapısı aşağıda verilmiştir. Bu örnekte, tüm yazı tipi dosyalarına bir CORS başlığı uygulanır.
"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": "*"
} ]
} ]
}
headers
özelliği, her tanımın aşağıdaki tabloda yer alan alanları içermesi gereken bir tanım dizisi içerir.
Alan | Açıklama | ||
---|---|---|---|
headers |
|||
source (önerilir) veya regex
|
İlk istek URL'siyle eşleşirse özel başlığı uygulamak için Hosting'yi tetikleyen bir URL kalıbı
Özel 404 sayfanızla eşleşen bir başlık oluşturmak için |
||
(sub-)headers dizisi |
Hosting özelliğinin istek yoluna uyguladığı özel başlıklar Her alt başlık bir |
||
key |
Üstbilginin adı (ör. Cache-Control ) |
||
value |
Başlığın değeri (ör. max-age=7200 ) |
Cache-Control
hakkında daha fazla bilgiyi, dinamik içerik sunma ve mikro hizmetler barındırmanın açıklandığı Hosting bölümünde bulabilirsiniz. CORS üstbilgileri hakkında da daha fazla bilgi edinebilirsiniz.
.html
uzantılarını kontrol etme
İsteğe bağlı
cleanUrls
özelliği, URL'lerin .html
uzantısını içerip içermeyeceğini kontrol etmenize olanak tanır.
true
olduğunda Hosting, yüklenen dosya URL'lerinden .html
uzantısını otomatik olarak kaldırır. İsteğe bir .html
uzantısı eklenirse Hosting, aynı yola 301
yönlendirme yapar ancak .html
uzantısını kaldırır.
cleanUrls
özelliği ekleyerek .html
özelliğinin URL'lere dahil edilmesini nasıl kontrol edeceğiniz aşağıda açıklanmıştır:
"hosting": {
// ...
// Drops `.html` from uploaded URLs
"cleanUrls": true
}
Sonundaki eğik çizgileri kontrol etme
İsteğe bağlı
trailingSlash
özelliği, statik içerik URL'lerinin sonuna eğik çizgi eklenip eklenmeyeceğini kontrol etmenize olanak tanır.
true
olduğunda Hosting, URL'leri yönlendirerek sonuna eğik çizgi ekler.false
olduğunda Hosting, son eğik çizgiyi kaldırmak için URL'leri yönlendirir.- Belirtilmezse Hosting yalnızca dizin dizini dosyaları için son eğik çizgi kullanır (örneğin,
about/index.html
).
trailingSlash
özelliği ekleyerek son eğik çizgileri nasıl kontrol edeceğiniz aşağıda açıklanmıştır:
"hosting": {
// ...
// Removes trailing slashes from URLs
"trailingSlash": false
}
trailingSlash
özelliği, Cloud Functions veya Cloud Run tarafından sunulan dinamik içerik için yeniden yazma işlemlerini etkilemez.
Yerküre kalıbı eşleştirme
Firebase Hosting yapılandırma seçenekleri, Git'in gitignore
kurallarını ve Bower'ın ignore
kurallarını işleyiş şekline benzer şekilde, extglob ile glob kalıp eşleştirme notasyonunu yoğun şekilde kullanır.
Bu wiki sayfası daha ayrıntılı bir referanstır, ancak bu sayfada kullanılan örneklerin açıklamaları aşağıda verilmiştir:
firebase.json
— Yalnızcapublic
dizininin kökündekifirebase.json
dosyasıyla eşleşir**
: Belirli bir alt dizindeki tüm dosya veya klasörlerle eşleşir.*
: Yalnızcapublic
dizininin kökündeki dosya ve klasörlerle eşleşir**/.*
: İsteğe bağlı bir alt dizinde.
ile başlayan tüm dosyaları (genellikle.git
klasöründeki gibi gizli dosyalar) eşleştirir.**/node_modules/**
:node_modules
klasörünün herhangi bir alt dizinindeki tüm dosya veya klasörlerle eşleşir.node_modules
klasörü depublic
dizininin herhangi bir alt dizininde olabilir.**/*.@(jpg|jpeg|gif|png)
: Rastgele bir alt dizinde, şu değerlerden biriyle biten tüm dosyaları eşleştirir:.jpg
,.jpeg
,.gif
veya.png
Tam Hosting yapılandırma örneği
Aşağıda, Firebase Hosting için tam bir firebase.json
yapılandırma örneği verilmiştir. firebase.json
dosyalarının diğer Firebase hizmetlerinin yapılandırmalarını da içerebileceğini unutmayın.
{
"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",
}
}