تكوين سلوك الاستضافة

باستخدام Firebase Hosting ، يمكنك تكوين سلوك استضافة مخصص للطلبات إلى موقعك.

ما الذي يمكنك تكوينه للاستضافة؟

  • حدد الملفات الموجودة في دليل المشروع المحلي الذي تريد نشره على Firebase Hosting. تعلم كيف.

  • قم بتقديم صفحة مخصصة 404 / لم يتم العثور على الصفحة. تعلم كيف.

  • إعداد redirects للصفحات التي كنت قد نقله أو حذفه. تعلم كيف.

  • إعداد rewrites لأي من هذه الأغراض:

    • إظهار نفس المحتوى لعناوين URL متعددة. تعلم كيف.

    • قم بتقديم وظيفة أو قم بالوصول إلى حاوية Cloud Run من عنوان URL للاستضافة. تعلم كيفية القيام بذلك: وظيفة أو حاوية .

    • إنشاء ارتباط ديناميكي مخصص للمجال. تعلم كيف.

  • إضافة headers لتمرير معلومات إضافية حول طلب أو رد، مثل كيفية التعامل مع المتصفحات يجب الصفحة ومحتواها (التوثيق، والتخزين المؤقت، والترميز، وما إلى ذلك). تعلم كيف.

  • أعد كتابة التدويل (i18n) لخدمة محتوى معين بناءً على تفضيل لغة المستخدم و / أو البلد. تعلم كيف (صفحة مختلفة).

أين تحدد تكوين الاستضافة الخاص بك؟

يمكنك تحديد Firebase التكوين استضافة الخاص بك في firebase.json الملف. Firebase تلقائيا بإنشاء الخاصة بك firebase.json الملف في جذر دليل المشروع الخاص بك عند تشغيل firebase init الأوامر.

يمكنك العثور على كامل firebase.json سبيل المثال التكوين (لا تغطي سوى استضافة Firebase) في أسفل هذه الصفحة. لاحظ أن firebase.json ملف يمكن أن تحتوي أيضا تكوينات لخدمات Firebase أخرى .

يمكنك التحقق من نشر firebase.json المحتوى باستخدام API REST استضافة .

ترتيب أولوية استضافة الردود

يمكن أن تتداخل أحيانًا خيارات تكوين Firebase Hosting المختلفة الموضحة في هذه الصفحة. في حالة وجود تعارض ، تحدد الاستضافة استجابتها باستخدام ترتيب الأولوية التالي:

  1. النطاقات المحجوزة التي تبدأ مع /__/* مقطع مسار
  2. تكوين الموجهات
  3. محتوى ثابت مطابق تمامًا
  4. تكوين يعيد كتابة
  5. العرف 404 صفحة
  6. صفحة 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 يحدد السمة الملفات إلى تجاهل على نشر. يمكن أن يستغرق اباريز بنفس الطريقة التي بوابة مقابض .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 إعادة توجيه قول المتصفح لتقديم طلب جديد في destination URL.

مجال وصف
redirects
source (موصى به)
أو regex

نمط عنوان URL ، في حالة تطابقه مع عنوان URL الأولي للطلب ، يؤدي إلى تشغيل الاستضافة لتطبيق إعادة التوجيه

destination

عنوان URL ثابت حيث يجب على المتصفح تقديم طلب جديد

يمكن أن يكون عنوان URL هذا نسبيًا أو مسارًا مطلقًا.

type

رمز استجابة HTTPS

  • استخدام نوع من 301 ل 'منقول بشكل دائم "
  • استخدام نوع من 302 ل 'العثور على "(إعادة توجيه مؤقتة)

التقاط مقاطع عناوين URL لعمليات إعادة التوجيه

اختياري
في بعض الأحيان، قد تحتاج إلى قطاعات التقاط محددة من قاعدة إعادة التوجيه نمط URL ( source أو regex القيمة)، ثم إعادة استخدام هذه الشرائح في حكم ل destination المسار.

تكوين عمليات إعادة الكتابة

اختياري
استخدم إعادة الكتابة لإظهار نفس المحتوى لعناوين URL متعددة. تعد عمليات إعادة الكتابة مفيدة بشكل خاص مع مطابقة الأنماط ، حيث يمكنك قبول أي عنوان URL يطابق النمط والسماح للكود من جانب العميل بتحديد ما سيتم عرضه.

يمكنك أيضا استخدام يعيد كتابة لدعم التطبيقات التي تستخدم HTML5 pushState للملاحة. عندما يحاول المتصفح لفتح مسار URL يطابق المحدد source أو regex نمط URL، وستعطى متصفح محتويات الملف في destination URL بدلا من ذلك.

تحديد 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 يطابق المحدد source أو regex نمط URL. عندما يطلق طلب على قاعدة إعادة الكتابة، يعود متصفح المحتوى الفعلي المحدد destination ملف بدلا من HTTP إعادة التوجيه.

مجال وصف
rewrites
source (موصى به)
أو regex

نمط عنوان URL ، إذا تطابق مع عنوان URL الأولي للطلب ، يقوم بتشغيل الاستضافة لتطبيق إعادة الكتابة

destination

ملف محلي يجب أن يكون موجودًا

يمكن أن يكون عنوان URL هذا نسبيًا أو مسارًا مطلقًا.

طلبات مباشرة إلى وظيفة

يمكنك استخدام rewrites لخدمة وظيفة من URL استضافة Firebase. المثال التالي مقتطف من خدمة المحتوى الديناميكي باستخدام وظائف السحب .

على سبيل المثال، لتوجيه جميع الطلبات من الصفحة /bigben على استضافة موقعك لتنفيذ bigben وظيفة:

"hosting": {
  // ...

  // Directs all requests from the page `/bigben` to execute the `bigben` function
  "rewrites": [ {
    "source": "/bigben",
    "function": "bigben"
  } ]
}

بعد إضافة هذه القاعدة كتابة ونشر لFirebase (باستخدام firebase deploy )، وظيفة الخاص بك هو يمكن الوصول إليها عن طريق عناوين المواقع التالية:

  • نطاقات 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 الوصول إلى حاوية الغيمة تشغيل من URL استضافة Firebase. المثال التالي مقتطف من خدمة المحتوى الديناميكي باستخدام الغيمة تشغيل .

على سبيل المثال، لتوجيه جميع الطلبات من الصفحة /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 )، صورة الحاويات ويمكن الوصول إليها عن طريق عناوين المواقع التالية:

  • نطاقات Firebase الفرعية الخاصة بك:
    PROJECT_ID .web.app/helloworld و PROJECT_ID .firebaseapp.com/helloworld

  • أي متصلة المجالات المخصصة :
    CUSTOM_DOMAIN /helloworld

عندما إعادة توجيه طلبات إلى حاويات الغيمة تشغيل مع استضافة، دعم أساليب طلب HTTP هي GET ، POST ، HEAD ، PUT ، DELETE ، PATCH ، و OPTIONS . أساليب أخرى مثل REPORT أو PROFIND غير معتمدة.

حاليًا ، يمكنك استخدام عمليات إعادة كتابة Cloud Run مع الاستضافة في المناطق التالية:

  • asia-east1
  • asia-east2
  • asia-northeast1
  • asia-northeast2
  • asia-northeast3
  • asia-south1
  • asia-southeast1
  • asia-southeast2
  • australia-southeast1
  • europe-north1
  • europe-west1
  • europe-west2
  • europe-west3
  • europe-west4
  • europe-west6
  • northamerica-northeast1
  • southamerica-east1
  • us-central1
  • us-east1
  • us-east4
  • us-west1

يمكنك استخدام 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

يجب تعيين AUTO

  • إذا كنت لا تشمل هذه السمة في التكوين الخاص بك، الافتراضي ل appAssociation هو AUTO .
  • من خلال تحديد هذه السمة إلى AUTO ، استضافة يمكن أن تولد حيوي assetlinks.json و apple-app-site-association الملفات عندما كنت المطلوبة.
rewrites
source

المسار الذي تريد استخدامه للارتباطات الديناميكية

على عكس القواعد التي تعيد كتابة المسارات إلى عناوين URL ، لا يمكن أن تحتوي إعادة كتابة قواعد الروابط الديناميكية على تعبيرات عادية.

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 الأولي للطلب ، يؤدي إلى تشغيل الاستضافة لتطبيق الرأس المخصص

لإنشاء رأس لمباراة ضد لديك صفحة مخصصة 404 ، استخدم 404.html ك source أو regex القيمة.

مجموعة من (الفرعية) headers

الرؤوس المخصصة التي يطبقها الاستضافة على مسار الطلب

يجب أن يتضمن كل-رأس الفرعية على key و value الزوج (انظر صفين التالية).

key اسم الرأس، على سبيل المثال Cache-Control
value قيمة رأس، على سبيل المثال max-age=7200

يمكنك معرفة المزيد عن Cache-Control في قسم الاستضافة التي تصف خدمة المحتوى الديناميكي وmicroservices الاستضافة. يمكنك أيضا معرفة المزيد حول CORS رؤوس.

السيطرة .html ملحقات

اختياري
و cleanUrls السمة يسمح لك للسيطرة على وجود أو عدم عناوين يجب أن تتضمن .html التمديد.

عندما true ، استضافة تلقائيا يسقط .html تمديد من عناوين ملف مرفوع. إذا كان .html يضاف التمديد في الطلب، استضافة ينفذ على 301 إعادة توجيه إلى نفس المسار ولكن يلغي .html التمديد.

وفيما يلي كيفية السيطرة على إدراج .html في عناوين URL التي كتبها بما في ذلك cleanUrls السمة:

"hosting": {
  // ...

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

التحكم في الخطوط المائلة اللاحقة

اختياري
و trailingSlash السمة يسمح لك للسيطرة على وجود أو عدم عناوين محتوى ثابتة وينبغي أن تتضمن مائلة زائدة.

  • عندما true ، استضافة الموجهات عناوين المواقع لإضافة خط مائل زائدة.
  • عندما false ، استضافة الموجهات عناوين المواقع لإزالة خط مائل زائدة.
  • عندما غير محددة، استضافة مائلة فقط يستخدم زائدة عن ملفات فهرس الدليل (على سبيل المثال، about/index.html ).

وفيما يلي كيفية السيطرة زائدة مائلة بإضافة trailingSlash السمة:

"hosting": {
  // ...

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

و trailingSlash سمة لا يؤثر يعيد كتابة إلى المحتوى الديناميكي التي يخدمها وظائف السحب أو سحابة تشغيل.

مطابقة نمط الكرة الأرضية

Firebase خيارات استضافة التكوين تجعل الاستخدام المكثف لل مطابقة نمط غلوب التدوين مع extglob، على غرار كيف مقابض بوابة gitignore القواعد و المظلة مقابض ignore القواعد. هذه الصفحة يكي هي إشارة أكثر تفصيلا، ولكن ما يلي تفسيرات من الأمثلة المستخدمة في هذه الصفحة:

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

  }
}