پیکربندی رفتار میزبانی

با Firebase Hosting ، می توانید رفتار میزبانی سفارشی را برای درخواست از سایت خود پیکربندی کنید.

چه چیزی می توانید برای هاست پیکربندی کنید؟

  • مشخص کنید که کدام پرونده ها را در فهرست پروژه محلی خود می خواهید در Firebase Hosting استقرار دهید. یاد بگیرند که چگونه.

  • از یک صفحه سفارشی 404 / Not Found استفاده کنید. یاد بگیرند که چگونه.

  • تنظیم redirects برای صفحات که شما نقل مکان کرد و یا حذف شده است. یاد بگیرند که چگونه.

  • تنظیم rewrites برای هر یک از این اهداف:

  • اضافه کردن headers برای تصویب به همراه اطلاعات اضافی در مورد یک درخواست یا پاسخ، مانند این که چگونه مرورگرهای باید صفحه و محتوای آن (خروج، ذخیره، را پشتیبانی می کند، و غیره) را اداره کند. یاد بگیرند که چگونه.

  • بازنویسی های بین المللی سازی (i18n) را برای ارائه محتوای خاص بر اساس ترجیح زبان کاربر و یا کشور تنظیم کنید. یاد بگیرید چگونه (صفحه های مختلف).

پیکربندی هاست خود را کجا تعریف می کنید؟

خود را فایربیس میزبانی پیکربندی در خود را تعریف کنید firebase.json فایل. فایربیس به طور خودکار ایجاد خود را firebase.json فایل در ریشه دایرکتوری پروژه خود را هنگامی که شما در اجرا firebase init فرمان.

شما می توانید یک پیدا کامل firebase.json مثال پیکربندی (پوشش تنها میزبانی فایربیس) در پایین این صفحه. توجه داشته باشید که firebase.json فایل نیز می تواند شامل تنظیمات برای سایر خدمات فایربیس .

شما می توانید مستقر بررسی firebase.json محتوا با استفاده از میزبانی API REST .

ترتیب اولویت پاسخ های میزبانی

گزینه های مختلف پیکربندی میزبان Firebase که در این صفحه توضیح داده شده است ، گاهی اوقات می توانند با هم همپوشانی داشته باشند. در صورت تضاد ، میزبانی پاسخ خود را با استفاده از ترتیب اولویت زیر تعیین می کند:

  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 مشخص ویژگی که دایرکتوری برای اعزام به فایربیس میزبانی. مقدار پیش فرض یک دایرکتوری به نام است 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 محتوای به فایل.

فایربیس میزبانی خواهد محتوای این سفارشی نمایش 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 ویژگی شامل آرایه ای از قوانین تغییر مسیر، که در آن هر قانون باید شامل زمینه در جدول زیر.

میزبانی فایربیس مقایسه source و یا regex ارزش در برابر تمام مسیرهای URL در آغاز هر درخواست (قبل از اینکه مرورگر تعیین اینکه آیا یک فایل یا پوشه در این مسیر وجود دارد). اگر یک مسابقه شده است، پس از آن فایربیس سرور میزبانی منشاء پاسخ 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 ویژگی شامل آرایه ای از قوانین بازنویسی، که در آن هر قانون باید شامل زمینه در جدول زیر.

فایربیس میزبانی تنها بازنویسی قانون اعمال می شود اگر یک فایل یا دایرکتوری می کند در یک مسیر URL که مشخص مسابقات وجود ندارد source و یا regex الگوی URL. وقتی که یک درخواست باعث بازنویسی قانون، بازده مرورگر محتوای واقعی مشخص destination فایل به جای یک HTTP تغییر مسیر است.

رشته شرح
rewrites
source (توصیه شده)
و یا regex

یک الگوی URL که اگر با URL درخواست اولیه مطابقت داشته باشد ، باعث می شود میزبانی وب مجدداً اعمال شود

destination

یک پرونده محلی که باید وجود داشته باشد

این URL می تواند یک مسیر نسبی یا مطلق باشد.

درخواست های مستقیم به یک عملکرد

شما می توانید با استفاده از rewrites به خدمت یک تابع از یک میزبانی URL فایربیس. در مثال زیر، گزیده ای از است در خدمت محتوای پویا با استفاده از توابع ابر .

به عنوان مثال، به طور مستقیم تمام درخواست از صفحه /bigben در سایت میزبانی وب خود را برای اجرای bigben تابع:

"hosting": {
  // ...

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

پس از اضافه کردن این بازنویسی قانون و استقرار به فایربیس (با استفاده از 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 فایربیس. در مثال زیر، گزیده ای از است در خدمت محتوای پویا با استفاده از ابر اجرا .

به عنوان مثال، به طور مستقیم تمام درخواست از صفحه /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 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 ها بازنویسی می کنند ، قوانین بازنویسی برای Dynamic Links نمی توانند شامل عبارات منظم باشند.

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 ، با استفاده از 404.html به عنوان خود را source و یا regex ارزش.

مجموعه ای از (خرده) headers

عناوین سفارشی که میزبانی در مسیر درخواست اعمال می کند

هر یک از زیر هدر باید شامل key و value جفت (نگاه کنید به دو ردیف بعدی).

key نام هدر، برای مثال Cache-Control
value ارزش برای هدر، برای مثال max-age=7200

شما می توانید اطلاعات بیشتر در مورد Cache-Control در بخش میزبانی است که به توصیف خدمت محتوای پویا و میکروسرویسها میزبانی. شما همچنین می توانید اطلاعات بیشتر در مورد CORS هدر.

کنترل .html پسوند

اختیاری
cleanUrls ویژگی اجازه می دهد تا شما را به کنترل یا نه آدرس ها باید شامل .html فرمت.

هنگامی که true ، میزبانی وب به طور خودکار قطره .html پسوند از آدرس فایل آپلود شده. اگر .html پسوند در درخواست اضافه شده است، میزبانی وب انجام 301 تغییر مسیر به همان مسیر را حذف می کند اما .html فرمت.

در اینجا نحوه کنترل گنجاندن .html در URL ها از جمله cleanUrls ویژگی:

"hosting": {
  // ...

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

برشهای عقب را کنترل کنید

اختیاری
trailingSlash ویژگی اجازه می دهد تا شما را به کنترل یا نه آدرس ها محتوای استاتیک باید شامل اسلش.

  • هنگامی که true ، میزبانی تغییرمسیر URL ها به اضافه کردن یک علامت.
  • هنگامی که false ، میزبانی تغییرمسیر URL ها را به حذف یک علامت.
  • وقتی نا مشخص، میزبانی اسلش تنها با استفاده از انتهایی برای فایل های شاخص دایرکتوری (به عنوان مثال، about/index.html ).

در اینجا نحوه کنترل یک خط مورب با اضافه کردن یک trailingSlash ویژگی:

"hosting": {
  // ...

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

trailingSlash مشخصه بازنویسی به محتوای پویا در خدمت توسط توابع ابر یا ابر اجرا تاثیر نمی گذارد.

تطبیق الگوی Glob

فایربیس گزینه های میزبانی پیکربندی را به استفاده گسترده از الگوی جانشین تطبیق نماد با 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.json فایل نیز می تواند شامل تنظیمات برای سایر خدمات فایربیس .

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

  }
}