باستخدام "استضافة Firebase"، يمكنك ضبط سلوك استضافة مخصّص للطلبات الواردة إلى موقعك الإلكتروني.
ما الذي يمكنك إعداده للاستضافة؟
حدِّد الملفات في دليل المشروع المحلي التي تريد نشرها في "استضافة Firebase". التعرّف على كيفية إجراء ذلك
عرض صفحة 404/لم يتم العثور عليها مخصصة. التعرّف على كيفية إجراء ذلك
يمكنك إعداد ميزة "
redirects
" للصفحات التي نقلتها أو حذفتها. التعرّف على كيفية إجراء ذلكإعداد "
rewrites
" لأي من الأغراض التالية:يمكنك عرض المحتوى نفسه لعناوين URL متعددة. تعرَّف على كيفية إجراء ذلك.
يمكنك عرض دالة أو الوصول إلى حاوية Cloud Run من عنوان URL مستضاف. تعرَّف على كيفية إجراء ذلك: الدالة أو الحاوية.
إنشاء رابط ديناميكي لنطاق خاص. التعرّف على كيفية إجراء ذلك
أضِف
headers
لتمرير معلومات إضافية حول طلب أو استجابة، مثل طريقة تعامل المتصفحات مع الصفحة ومحتواها (المصادقة والتخزين المؤقت والترميز وغير ذلك). التعرّف على كيفية إجراء ذلكيمكنك إعداد إعادة صياغة المحتوى بلغات مختلفة لعرض محتوى معيّن استنادًا إلى إعدادات اللغة المفضّلة لدى المستخدم و/أو البلد. تعرَّف على كيفية إجراء ذلك (صفحة مختلفة).
أين يمكنك تحديد إعدادات الاستضافة؟
يمكنك تحديد إعدادات "استضافة Firebase" في ملف
firebase.json
. ينشئ Firebase
تلقائيًا ملف firebase.json
في جذر دليل المشروع
عند تشغيل الأمر
firebase init
.
يمكنك العثور في أسفل هذه الصفحة على
مثال كامل على إعدادات firebase.json
(يشمل "استضافة Firebase" فقط). يُرجى العِلم أنّ ملف firebase.json
يمكن أن يحتوي أيضًا على إعدادات خدمات Firebase الأخرى.
يمكنك الاطّلاع على محتوى firebase.json
الذي تم نشره باستخدام
Hosting REST API.
ترتيب أولوية استضافة الردود
في بعض الأحيان، يمكن أن تتداخل خيارات الإعداد المختلفة "استضافة Firebase" الموضحة في هذه الصفحة. إذا كان هناك تعارض، تحدد "الاستضافة" ردها باستخدام ترتيب الأولوية التالي:
- مساحات الاسم المحجوزة التي تبدأ بشريحة مسار
/__/*
- عمليات إعادة التوجيه التي تم ضبطها
- المحتوى الثابت المطابق تمامًا
- عمليات إعادة الكتابة التي تم ضبطها
- صفحة 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". القيمة التلقائية هي دليل يُسمى public
، ولكن يمكنك تحديد مسار أي دليل طالما أنّه موجود في دليل مشروعك.
فيما يلي هو الاسم التلقائي المحدد للدليل لنشره:
"hosting": {
"public": "public"
// ...
}
يمكنك تغيير القيمة التلقائية إلى الدليل الذي تريد نشره:
"hosting": {
"public": "dist/app"
// ...
}
تجاهل
اختيارية
تحدد السمة ignore
الملفات المطلوب تجاهلها عند النشر. يمكن أن يتعامل مع
glob بالطريقة نفسها التي يتعامل بها
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" محتوى صفحة 404.html
المخصصة هذه إذا عرض أحد المتصفحات خطأ 404 Not Found
على نطاقك أو نطاقك الفرعي.
ضبط عمليات إعادة التوجيه
اختياري
يمكنك استخدام عملية إعادة توجيه عنوان URL لمنع الروابط المعطلة إذا نقلت صفحة
أو اختصار عناوين URL. على سبيل المثال، يمكنك إعادة توجيه المتصفّح من
example.com/team
إلى example.com/about.html
.
حدِّد عمليات إعادة توجيه عناوين URL من خلال إنشاء سمة redirects
تحتوي على مجموعة من العناصر (تُسمى "قواعد إعادة التوجيه"). في كل قاعدة، حدِّد نمط عنوان URL الذي يؤدي تطابقه مع مسار عنوان URL للطلب إلى تشغيل الاستضافة للاستجابة بعملية إعادة توجيه إلى عنوان 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" قيمة source
أو regex
بجميع مسارات عناوين URL في بداية كل طلب (قبل أن يحدّد المتصفّح ما إذا كان هناك ملف أو مجلد على ذلك المسار). في حال العثور على مطابقة، يرسل
خادم المصدر لاستضافة Firebase استجابة إعادة توجيه HTTPS تطلب من
المتصفّح إرسال طلب جديد على عنوان URL الخاص بـ destination
.
الحقل | الوصف | |
---|---|---|
redirects |
||
source (موصى بها) أو regex
|
نمط عنوان URL إذا مطابقته مع عنوان URL للطلب الأولي، يشغّل "الاستضافة" لتطبّق عملية إعادة التوجيه
|
|
destination |
عنوان URL ثابت حيث يجب أن يُجري المتصفّح طلبًا جديدًا وقد يكون عنوان URL هذا مسارًا نسبيًا أو مسارًا مطلقًا. |
|
type |
رمز استجابة HTTPS
|
التقاط مقاطع عناوين URL لعمليات إعادة التوجيه
اختيارية
قد تحتاج أحيانًا إلى تسجيل مقاطع محدّدة من نمط عنوان URL الخاص بقاعدة إعادة توجيه (القيمة source
أو القيمة regex
)، ثم إعادة استخدام هذه الأقسام في مسار destination
للقاعدة.
ضبط عمليات إعادة الكتابة
اختياري
استخدِم عملية إعادة الكتابة لعرض المحتوى نفسه لعناوين URL متعددة. وتفيد إعادة الكتابة بشكل خاص في مطابقة الأنماط، إذ يمكنك قبول أي عنوان URL يتطابق مع النمط والسماح للرمز من جهة العميل بتحديد ما تريد عرضه.
يمكنك أيضًا استخدام إعادة الكتابة لإتاحة التطبيقات التي تستخدم HTML5 PushState للتنقل. عندما يحاول المتصفّح فتح مسار عنوان URL يطابق نمط عنوان URL source
أو regex
المحدّد، سيحصل المتصفّح على
محتوى الملف على عنوان URL الخاص بـ destination
بدلاً من ذلك.
حدِّد عمليات إعادة كتابة عناوين URL عن طريق إنشاء سمة rewrites
تحتوي على مصفوفة من العناصر (تُسمى "قواعد إعادة الكتابة"). في كل قاعدة، حدِّد نمط عنوان URL الذي يؤدي تطابقه مع مسار عنوان URL للطلب إلى تشغيل "الاستضافة" للاستجابة كما لو تم منح الخدمة عنوان 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" قاعدة إعادة الكتابة إلا في حال عدم توفّر ملف أو دليل في مسار عنوان URL يطابق نمط عنوان URL المحدَّد source
أو regex
.
عندما يشغّل طلب قاعدة إعادة كتابة، يعرض المتصفّح المحتوى الفعلي لملف destination
المحدد بدلاً من إعادة توجيه HTTP.
الحقل | الوصف | |
---|---|---|
rewrites |
||
source (موصى بها) أو regex
|
نمط عنوان URL إذا تمت مطابقته مع عنوان URL للطلب الأولي، يشغّل "الاستضافة" تطبّق إعادة الكتابة
|
|
destination |
يجب أن يكون هناك ملف محلي وقد يكون عنوان URL هذا مسارًا نسبيًا أو مسارًا مطلقًا. |
الطلبات المباشرة إلى دالة
يمكنك استخدام rewrites
لعرض دالة من عنوان URL لاستضافة Firebase. المثال التالي هو مقتطف من عرض المحتوى الديناميكي باستخدام دوال Cloud.
على سبيل المثال، لتوجيه جميع الطلبات من صفحة /bigben
على موقعك الإلكتروني المضيف لتنفيذ الدالة 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
عند إعادة توجيه الطلبات إلى الدوال باستخدام الاستضافة، تكون طرق طلب HTTP المتوافقة هي GET
وPOST
وHEAD
وPUT
وDELETE
وPATCH
وOPTIONS
.
ولا يمكن استخدام طرق أخرى، مثل REPORT
أو PROFIND
.
توجيه الطلبات إلى حاوية Cloud Run
يمكنك استخدام rewrites
للوصول إلى حاوية Cloud Run من خلال عنوان URL لاستضافة Firebase. المثال التالي هو مقتطف من عرض المحتوى الديناميكي باستخدام Cloud Run.
على سبيل المثال، لتوجيه جميع الطلبات من صفحة /helloworld
على الموقع الإلكتروني المضيف إلى بدء تشغيل مثيل حاوية 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
عند إعادة توجيه الطلبات إلى حاويات "تشغيل السحابة الإلكترونية" باستخدام "الاستضافة"،
طرق طلبات HTTP المتوافقة هي GET
وPOST
وHEAD
وPUT
وDELETE
وPATCH
وOPTIONS
. ولا يمكن استخدام طرق أخرى، مثل REPORT
أو PROFIND
.
لتحقيق أفضل أداء، يمكنك تجميع خدمة تشغيل السحابة الإلكترونية مع خدمة "الاستضافة" باستخدام المناطق التالية:
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
إنشاء روابط ديناميكية لنطاق مخصص
يمكنك استخدام rewrites
لإنشاء روابط ديناميكية خاصة بنطاق. انتقِل إلى وثائق الروابط الديناميكية للحصول على معلومات تفصيلية عن إعداد نطاق خاص للروابط الديناميكية.
استخدام نطاقك الخاص فقط للروابط الديناميكية
"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 } ] }
تحديد بادئات مسار النطاق المخصص المطلوب استخدامها للروابط الديناميكية
"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
ما يلي:
الحقل | الوصف | |
---|---|---|
appAssociation |
يجب الضبط على
|
|
rewrites |
||
source |
مسار تريد استخدامه للروابط الديناميكية على عكس القواعد التي تعيد كتابة المسارات إلى عناوين URL، لا يمكن أن تحتوي قواعد إعادة كتابة الروابط الديناميكية على تعبيرات عادية. |
|
dynamicLinks |
يجب الضبط على true
|
ضبط العناوين
اختيارية
تتيح العناوين للعميل والخادم تمرير معلومات إضافية إلى جانب الطلب أو الردّ. يمكن أن تؤثر بعض مجموعات العناوين في كيفية معالجة المتصفّح للصفحة ومحتواها، بما في ذلك التحكّم في الوصول والمصادقة والتخزين المؤقت والترميز.
حدِّد عناوين استجابة مخصّصة وخاصة بالملف من خلال إنشاء سمة headers
تحتوي على مجموعة من كائنات العناوين. في كل عنصر، حدِّد نمط عنوان URL الذي يؤدي مطابقته مع مسار عنوان URL للطلب إلى تشغيل "الاستضافة" لتطبيق عناوين الاستجابة المخصّصة المحدّدة.
في ما يلي البنية الأساسية للسمة 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 للطلب الأولي، يشغّل "الاستضافة" لتطبيق العنوان المخصّص
لإنشاء عنوان لمطابقته مع صفحة 404 المخصّصة، استخدِم |
||
مصفوفة (sub-)headers |
الرؤوس المخصصة التي تنطبق عليها الاستضافة على مسار الطلب يجب أن يتضمّن كل عنوان فرعي زوجًا من |
||
key |
اسم العنوان، مثل Cache-Control |
||
value |
قيمة العنوان، على سبيل المثال max-age=7200 |
يمكنك معرفة المزيد عن Cache-Control
في قسم "الاستضافة" الذي يصف عرض المحتوى الديناميكي واستضافة الخدمات المصغّرة. يمكنك أيضًا الاطّلاع على مزيد من المعلومات حول عناوين CORS.
التحكّم في إضافات ".html
"
اختيارية
تتيح لك السمة cleanUrls
التحكّم في ما إذا كانت عناوين URL
يجب أن تتضمّن الإضافة .html
.
عندما true
، تتجاهل الاستضافة الإضافة .html
تلقائيًا من عناوين URL للملفات التي تم تحميلها. وفي حال إدراج إضافة .html
في الطلب، تنفّذ الاستضافة عملية إعادة توجيه 301
إلى المسار نفسه ولكنها تزيل الإضافة .html
.
إليك كيفية التحكّم في تضمين .html
في عناوين URL من خلال تضمين السمة cleanUrls
:
"hosting": {
// ...
// Drops `.html` from uploaded URLs
"cleanUrls": true
}
التحكّم في الشرطة المائلة اللاحقة
اختيارية
تسمح لك السمة trailingSlash
بالتحكّم في ما إذا كان يجب أن تتضمّن عناوين URL الثابتة للمحتوى شرطات مائلة لاحقة.
- عندما يكون
true
، تعيد استضافة عناوين URL التوجيه إلى إضافة شرطة مائلة لاحقة. - عندما
false
، تعيد استضافة عناوين URL توجيه عناوين URL لإزالة شرطة مائلة لاحقة. - في حال عدم تحديد ذلك، لا تستخدم "الاستضافة" سوى الشرطات المائلة اللاحقة لملفات فهرس الدليل (على سبيل المثال،
about/index.html
).
في ما يلي كيفية التحكّم في الشرطة المائلة اللاحقة عن طريق إضافة السمة trailingSlash
:
"hosting": {
// ...
// Removes trailing slashes from URLs
"trailingSlash": false
}
لا تؤثر السمة trailingSlash
في عمليات إعادة كتابة المحتوى الديناميكي الذي تقدّمه دوال Cloud أو Cloud Run.
مطابقة أنماط الكرة الأرضية
تستفيد خيارات إعداد "استضافة Firebase" من استخدام علامة
مطابقة النمط الكروي
مع 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
مثال على إعدادات الاستضافة الكاملة
في ما يلي مثال كامل على إعدادات firebase.json
لاستضافة Firebase. يُرجى العلم أنّ ملف 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",
}
}