باستخدام Firebase Hosting، يمكنك ضبط سلوك استضافة مخصّص لطلبات العميل المرسَلة إلى موقعك الإلكتروني.
ما هي الإعدادات التي يمكنك ضبطها في Hosting؟
تحديد الملفات في دليل المشروع المحلي التي تريد النشر إليها Firebase Hosting التعرّف على كيفية إجراء ذلك
عرض صفحة 404/لم يتم العثور على الصفحة مخصّصة التعرّف على كيفية إجراء ذلك
يمكنك إعداد ميزة "
redirects
" للصفحات التي نقلتها أو حذفتها. التعرّف على كيفية إجراء ذلكإعداد "
rewrites
" لأي من الأغراض التالية:عرض المحتوى نفسه لعناوين URL متعددة التعرّف على كيفية إجراء ذلك
عرض دالة أو الوصول إلى حاوية Cloud Run من Hosting عنوان URL. تعرَّف على كيفية إجراء ذلك: الوظيفة أو الحاوية.
إنشاء نطاق خاص Dynamic Link التعرّف على كيفية إجراء ذلك
أضِف
headers
لنقل معلومات إضافية عن طلب أو استجابة، مثل كيفية تعامل المتصفّحات مع الصفحة ومحتوى (المصادقة والتخزين المؤقت والترميز وما إلى ذلك). التعرّف على كيفية إجراء ذلكإعداد إعادة صياغة الإعلانات بلغات متعددة لعرض محتوى معيّن استنادًا إلى حسب إعدادات اللغة المفضّلة للمستخدم و/أو بلده تعرَّف على كيفية إجراء ذلك (صفحة مختلفة).
أين يمكنك تحديد إعدادات Hosting؟
أنت تحدد إعدادات Firebase Hosting في
ملف firebase.json
. الإعداد عن بُعد
ينشئ ملف firebase.json
تلقائيًا في جذر مشروعك.
الدليل عند تشغيل
firebase init
.
يمكنك العثور على
مثال كامل على إعداد firebase.json
(يشمل ذلك Firebase Hosting فقط) في أسفل هذه الصفحة. لاحظ أن
يمكن أن يحتوي ملف واحد (firebase.json
) أيضًا على
بإعدادات خدمات Firebase الأخرى.
يمكنك الاطّلاع على محتوى "firebase.json
" المنشور باستخدام
Hosting REST API:
ترتيب الأولوية لـ Hosting رد
يمكن أن تتداخل أحيانًا خيارات ضبط Firebase Hosting المختلفة الموضّحة في هذه الصفحة . إذا كان هناك تعارض، يحدِّد Hosting ردًا باستخدام ترتيب الأولوية التالي:
- مساحات الاسم المحجوزة التي تبدأ بشريحة مسار
/__/*
- عمليات إعادة التوجيه التي تم ضبطها
- المحتوى الثابت المطابق تمامًا
- عمليات إعادة الكتابة التي تم ضبطها
- صفحة 404 مخصّصة
- الصفحة 404 التلقائية
إذا كنت تستخدِم عمليات إعادة الكتابة بتنسيق i18n، يتم توسيع نطاق ترتيب الأولوية في معالجة المطابقة التامة ومعالجة الخطأ 404 لاستيعاب "محتوى i18n ".
تحديد الملفات المطلوب نشرها
تم تضمين السمتَين التلقائيتَين، public
وignore
.
في ملف firebase.json
الافتراضي، حدد الملفات في دليل مشروعك
يجب نشره إلى مشروع Firebase.
تظهر إعدادات hosting
التلقائية في ملف firebase.json
على النحو التالي:
"hosting": {
"public": "public", // the only required attribute for Hosting
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
]
}
عامة
مطلوبة
تحدد السمة public
الدليل الذي سيتم النشر فيه
Firebase Hosting القيمة التلقائية هي دليل يسمى public
، ولكن
يمكنك تحديد مسار أي دليل، طالما أنّه موجود في مشروعك
الدليل.
فيما يلي هو الاسم التلقائي المحدد للدليل لنشره:
"hosting": {
"public": "public"
// ...
}
يمكنك تغيير القيمة التلقائية إلى الدليل الذي تريد نشره:
"hosting": {
"public": "dist/app"
// ...
}
تجاهل
اختيارية
تحدد السمة ignore
الملفات المراد تجاهلها عند النشر. قد يستغرق
globs بنفس الطريقة
يتعامل Git مع .gitignore
.
وفي ما يلي القيم الافتراضية للملفات المطلوب تجاهلها:
"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/لم يتم العثور على الصفحة
اختيارية
يمكنك عرض خطأ 404 Not Found
مخصّص عندما يحاول المستخدم الوصول إلى صفحة معيّنة.
غير موجود.
أنشِئ ملفًا جديدًا في دليل public
الخاص بمشروعك وحدِّد اسمًا له.
404.html
، ثم أضِف محتوى 404 Not Found
المخصّص إلى الملف.
ستعرض ميزة "Firebase Hosting" محتوى صفحة 404.html
المخصّصة هذه إذا
يعرض المتصفّح الخطأ 404 Not Found
على نطاقك أو نطاقك الفرعي.
ضبط عمليات إعادة التوجيه
اختيارية
يمكنك استخدام عملية إعادة توجيه عنوان URL لمنع الروابط المعطّلة إذا نقلت صفحة.
أو اختصار عناوين URL على سبيل المثال، يمكنك إعادة توجيه متصفح من
من example.com/team
إلى example.com/about.html
حدِّد عمليات إعادة التوجيه لعناوين URL من خلال إنشاء سمة redirects
تحتوي على صفيف
من الكائنات (يُشار إليها باسم "قواعد إعادة التوجيه"). في كل قاعدة، حدد نمط عنوان URL الذي
إذا تمت مطابقته مع مسار عنوان URL للطلب، يؤدي إلى تشغيل Hosting للاستجابة من خلال إعادة توجيه
إلى عنوان URL المقصود المحدد.
في ما يلي البنية الأساسية للسمة redirects
. هذا المثال يعيد التوجيه
إلى /foo
من خلال تقديم طلب جديد إلى /bar
.
"hosting": {
// ...
// Returns a permanent redirect to "/bar" for requests to "/foo" (but not "/foo/**")
"redirects": [ {
"source": "/foo",
"destination": "/bar",
"type": 301
} ]
}
تحتوي السمة redirects
على مجموعة من قواعد إعادة التوجيه، حيث يتم وضع كل قاعدة
يجب أن يشمل الحقول في الجدول أدناه.
يقارن Firebase Hosting قيمة source
أو regex
مع جميع عناوين URL
والمسارات في بداية كل طلب (قبل أن يحدد المتصفح ما إذا كان
الملف أو المجلد الموجود في هذا المسار). في حال العثور على تطابق،
يرسل خادم المصدر Firebase Hosting استجابة إعادة توجيه HTTPS لإخبار
المتصفّح لإرسال طلب جديد على عنوان URL الخاص بـ destination
.
الحقل | الوصف | |
---|---|---|
redirects |
||
source (مُقترَح) أو regex
|
نمط عنوان URL يؤدي، إذا مطابقته مع عنوان URL للطلب الأولي، إلى تشغيل Hosting لتطبيق إعادة التوجيه
|
|
destination |
عنوان URL ثابت حيث يجب أن يُجري المتصفّح طلبًا جديدًا وقد يكون عنوان URL هذا مسارًا نسبيًا أو مسارًا مطلقًا. |
|
type |
رمز استجابة HTTPS
|
التقاط مقاطع عناوين URL لعمليات إعادة التوجيه
اختياري
قد تحتاج أحيانًا إلى تسجيل أجزاء معيّنة من نمط عنوان URL لقاعدة إعادة التوجيه
(قيمة source
أو regex
)، ثم إعادة استخدام هذه الأجزاء في
مسار destination
للقاعدة.
ضبط عمليات إعادة الكتابة
اختياري
استخدِم إعادة الكتابة لعرض المحتوى نفسه لعناوين URL متعددة. وتكون عمليات إعادة الكتابة مفيدة بشكلٍ خاص عند مطابقة الأنماط، لأنّه يمكنك قبول أي عنوان URL يطابق النمط والسماح للرمز البرمجي من جهة العميل بتحديد ما يجب عرضه.
يمكنك أيضًا استخدام ميزة إعادة الكتابة لدعم التطبيقات التي تستخدم
pushState بتنسيق HTML5
للتنقل. عندما يحاول المتصفّح فتح مسار عنوان URL يتطابق مع
نمط عنوان URL المحدّد source
أو regex
، سيتم منح المتصفّح
محتوى الملف المتوفّر على عنوان URL destination
بدلاً من ذلك.
حدِّد عمليات إعادة كتابة عناوين URL من خلال إنشاء سمة rewrites
تحتوي على مصفوفة.
من الكائنات (تسمى "قواعد إعادة الكتابة"). في كل قاعدة، حدد نمط عنوان URL الذي
إذا تمت مطابقته مع مسار عنوان URL للطلب، يشغِّل "Hosting" للرد كما لو كانت
تم منح الخدمة عنوان URL المقصود المحدد.
في ما يلي البنية الأساسية لسمة rewrites
. يعرض هذا المثال
index.html
لطلبات الملفات أو الأدلة غير المتوفّرة.
"hosting": {
// ...
// Serves index.html for requests to files or directories that do not exist
"rewrites": [ {
"source": "**",
"destination": "/index.html"
} ]
}
تحتوي السمة rewrites
على مصفوفة من قواعد إعادة الكتابة، حيث تضم كل قاعدة
يجب أن يشمل الحقول في الجدول أدناه.
لا تطبِّق ميزة "Firebase Hosting" قاعدة إعادة الكتابة إلا إذا لم يكن هناك ملف أو دليل.
في مسار عنوان URL يتطابق مع نمط عنوان URL source
أو regex
المحدّد.
عندما يشغّل طلب قاعدة إعادة كتابة، يعرض المتصفح المحتوى الفعلي
من ملف destination
المحدد بدلاً من إعادة توجيه HTTP.
الحقل | الوصف | |
---|---|---|
rewrites |
||
source (موصى بها) أو regex
|
نمط عنوان URL يؤدي، إذا مطابقته مع عنوان URL للطلب الأولي، إلى تشغيل Hosting لتطبيق إعادة الكتابة
|
|
destination |
يجب أن يكون هناك ملف محلي وقد يكون عنوان URL هذا مسارًا نسبيًا أو مسارًا مطلقًا. |
الطلبات المباشرة إلى دالة
يمكنك استخدام rewrites
لعرض دالة من عنوان URL للسمة Firebase Hosting. تشير رسالة الأشكال البيانية
المثال التالي هو مقتطف من
عرض محتوى ديناميكي باستخدام Cloud Functions.
على سبيل المثال، لتوجيه جميع الطلبات من الصفحة /bigben
على
موقع Hosting الإلكتروني لتنفيذ الدالة 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)
}
} ]
}
بعد إضافة قاعدة إعادة الكتابة هذه والنشر في Firebase (باستخدام
firebase deploy
)، يمكن الوصول إلى الدالة عبر عناوين URL التالية:
نطاقاتك الفرعية في Firebase:
PROJECT_ID.web.app/bigben
وPROJECT_ID.firebaseapp.com/bigben
أي نطاقات مخصصة مرتبطة:
CUSTOM_DOMAIN/bigben
عند إعادة توجيه الطلبات إلى الدوال باستخدام Hosting، يكون طلب HTTP متوافقًا
الطرق هي GET
وPOST
وHEAD
وPUT
وDELETE
وPATCH
وOPTIONS
.
ولا يمكن استخدام طرق أخرى، مثل REPORT
أو PROFIND
.
توجيه الطلبات إلى حاوية Cloud Run
يمكنك استخدام rewrites
للوصول إلى حاوية Cloud Run من
عنوان URL لـ Firebase Hosting. المثال التالي هو مقتطف من
عرض محتوى ديناميكي باستخدام Cloud Run.
على سبيل المثال، لتوجيه جميع الطلبات من الصفحة /helloworld
على
موقع Hosting الإلكتروني لبدء تشغيل حاوية 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)
}
} ]
}
بعد إضافة قاعدة إعادة الكتابة هذه والنشر في Firebase (باستخدام
firebase deploy
)، يمكن الوصول إلى صورة الحاوية من خلال عناوين URL التالية:
نطاقاتك الفرعية في Firebase:
PROJECT_ID.web.app/helloworld
وPROJECT_ID.firebaseapp.com/helloworld
أي نطاقات مخصصة مرتبطة:
CUSTOM_DOMAIN/helloworld
عند إعادة توجيه الطلبات إلى حاويات Cloud Run باستخدام Hosting،
طرق طلب HTTP المتوافقة هي GET
وPOST
وHEAD
وPUT
وDELETE
PATCH
، وOPTIONS
. لا يمكن استخدام طرق أخرى مثل REPORT
أو PROFIND
.
للحصول على أفضل أداء، يمكنك تجميع خدمة Cloud Run من خلال Hosting باستخدام المناطق التالية:
us-west1
us-central1
us-east1
europe-west1
asia-east1
تتوفر إعادة الكتابة إلى Cloud Run من Hosting في المناطق التالية:
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
يمكنك استخدام rewrites
لإنشاء النطاق المخصّص Dynamic Links. يمكنك الانتقال إلى Dynamic Links.
وثائق للحصول على معلومات مفصلة عن
إعداد نطاق خاص لـ Dynamic Links.
استخدم نطاقك الخاص فقط لـ 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 } ] }
تحديد بادئات مسار النطاق المخصص المطلوب استخدامها في 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 } ] }
لإعداد Dynamic Links في ملف firebase.json
، يجب ما يلي:
الحقل | الوصف | |
---|---|---|
appAssociation |
يجب ضبطها على
|
|
rewrites |
||
source |
مسار تريد استخدامه مع Dynamic Links على عكس القواعد التي تعيد كتابة المسارات إلى عناوين URL، يجب إعادة كتابة القواعد في Dynamic Links. لا يمكن أن يحتوي على تعبيرات عادية. |
|
dynamicLinks |
يجب الضبط على true
|
ضبط العناوين
اختيارية
تسمح الرؤوس للعميل والخادم بتمرير معلومات إضافية معك.
بطلب أو استجابة. يمكن أن تؤثر بعض مجموعات الرؤوس في كيفية تعامل المتصفّح
مع الصفحة ومحتوى الصفحة، بما في ذلك التحكّم في الوصول والمصادقة
والتخزين المؤقت والترميز.
حدِّد عناوين استجابة مخصّصة وخاصة بالملف من خلال إنشاء سمة headers
.
يحتوي على مصفوفة من كائنات العنوان. تحديد نمط عنوان URL في كل عنصر
إذا تمت مطابقته مع مسار عنوان URL للطلب، يشغِّل Hosting لتطبيق
عناوين الاستجابة المخصصة المحددة.
في ما يلي البنية الأساسية للسمة headers
. ينطبق هذا المثال
عنوان CORS لجميع ملفات الخطوط.
"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
على صفيف من التعريفات، ويجب أن يتضمّن كل تعريف
الحقول الواردة في الجدول أدناه.
الحقل | الوصف | ||
---|---|---|---|
headers |
|||
source (موصى بها) أو regex
|
نمط عنوان URL يؤدي، إذا مطابقته مع عنوان URL للطلب الأولي، إلى تشغيل Hosting لتطبيق العنوان المخصّص
لإنشاء عنوان لمطابقته مع
صفحة 404 المخصّصة، استخدِم |
||
مصفوفة (sub-)headers |
العناوين المخصّصة التي تنطبق Hosting على مسار الطلب يجب أن يشتمل كل عنوان فرعي على
إقران |
||
key |
اسم العنوان، مثل Cache-Control |
||
value |
قيمة العنوان، على سبيل المثال max-age=7200 |
يمكنك الاطّلاع على مزيد من المعلومات حول Cache-Control
في القسم
Hosting الذي يصف عرض المحتوى الديناميكي واستضافة
الخدمات المصغرة. يمكنك أيضًا معرفة المزيد حول
CORS.
التحكّم في إضافات ".html
"
اختيارية
تسمح لك السمة cleanUrls
بالتحكّم في ما إذا كانت عناوين URL أم لا
يجب أن يتضمن الإضافة .html
.
عندما يتم true
، يستبعد Hosting الإضافة .html
تلقائيًا من تاريخ تحميلها
لعناوين URL للملفات. إذا تم إدراج إضافة .html
في الطلب، سيعمل Hosting على تنفيذ ما يلي:
إعادة التوجيه 301
إلى نفس المسار ولكنها تستبعد الإضافة .html
.
إليك كيفية التحكّم في تضمين .html
في عناوين URL من خلال تضمين
السمة cleanUrls
:
"hosting": {
// ...
// Drops `.html` from uploaded URLs
"cleanUrls": true
}
التحكّم في الشرطة المائلة اللاحقة
اختيارية
تسمح لك السمة trailingSlash
بالتحكم في ما إذا كانت قيمة ثابتة أم لا
يجب أن تتضمن عناوين URL للمحتوى شرطات مائلة لاحقة.
- عندما يكون
true
، يعيد Hosting توجيه عناوين URL لإضافة الشرطة المائلة للخلف. - عند
false
، تعيد Hosting توجيه عناوين URL لإزالة الشرطة المائلة اللاحقة. - في حال عدم تحديدها، لا يستخدم Hosting الشرطات المائلة للخلف اللاحقة إلا لملفات فهرس الدليل (مثل
about/index.html
).
في ما يلي كيفية التحكّم في الشرطة المائلة اللاحقة عن طريق إضافة السمة trailingSlash
:
"hosting": {
// ...
// Removes trailing slashes from URLs
"trailingSlash": false
}
لا تؤثر السمة trailingSlash
في عمليات إعادة كتابة المحتوى الديناميكي.
يتم عرضها من خلال Cloud Functions أو Cloud Run.
مطابقة أنماط الكرة الأرضية
تستفيد خيارات ضبط Firebase Hosting من
مطابقة أنماط الكرة الأرضية
بترميز extglob، على غرار الطريقة التي يتعامل بها Git
قواعد gitignore
يتعامل Bower مع قواعد ignore
.
يمكنك الاطّلاع على صفحة موقع wiki هذه كمرجع أكثر تفصيلاً،
ولكن ما يلي توضيحات للأمثلة المستخدمة في هذه الصفحة:
firebase.json
- لا يتطابق إلا مع ملفfirebase.json
في الجذر للدليلpublic
**
— يطابق أي ملف أو مجلد في دليل فرعي عشوائي*
: تتطابق مع الملفات والمجلدات في جذر الملف فقط. دليلpublic
**/.*
— يطابق أي ملف يبدأ بـ.
(عادةً الملفات المخفية، كما هو الحال في المجلد.git
) في دليل فرعي عشوائي**/node_modules/**
: يتطابق مع أي ملف أو مجلد عشوائيًا. دليل فرعي لمجلدnode_modules
، والذي يمكن أن يكون في حد ذاته عشوائيًا الدليل الفرعي في دليلpublic
**/*.@(jpg|jpeg|gif|png)
: يتطابق مع أي ملف عشوائيًا. دليل فرعي ينتهي بأي مما يلي بالضبط:.jpg
أو.jpeg
أو.gif
أو.png
مثال على إعداد Hosting الكامل
في ما يلي مثال كامل على إعدادات firebase.json
لملف
Firebase Hosting. يُرجى العلم أنّ ملف firebase.json
يمكن أن يحتوي أيضًا على
بإعدادات خدمات 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",
}
}