Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

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

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

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

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

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

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

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

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

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

پیکربندی میزبانی خود را کجا تعیین می کنید؟

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

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

شما می توانید مستقر بررسی 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 مشخص ویژگی که دایرکتوری برای اعزام به فایربیس میزبانی. مقدار پیش فرض یک دایرکتوری به نام است 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 استفاده کنید. به عنوان مثال، شما می توانید از یک مرورگر از تغییر مسیر example.com/team به example.com/about.html .

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

یک آدرس اینترنتی ثابت که در آن مرورگر باید درخواست جدیدی انجام دهد

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

type

کد پاسخ HTTPS

  • استفاده از یک نوع 301 برای 'صورت دائم منتقل شد.
  • استفاده از یک نوع 302 برای '' (تغییر مسیر موقت)

قطعات URL را برای تغییر مسیرها ضبط کنید

اختیاری
گاهی اوقات، شما ممکن است به بخش های ضبط خاص از الگوی URL یک قانون تغییر مسیر است (نیاز به source و یا regex ارزش)، پس از آن استفاده مجدد از این بخش در قاعده destination مسیر.

بازنویسی ها را پیکربندی کنید

اختیاری
از بازنویسی برای نمایش محتوای یکسان برای چندین نشانی وب استفاده کنید. بازنویسی به ویژه در تطبیق الگو مفید است ، زیرا می توانید هر نشانی اینترنتی را که با الگو مطابقت دارد بپذیرید و اجازه دهید کد سمت مشتری تصمیم بگیرد که چه چیزی نمایش داده شود.

شما همچنین می توانید بازنویسی به حمایت از برنامه های که با استفاده از استفاده از HTML5 pushState برای ناوبری. هنگامی که یک تلاش مرورگر برای باز کردن یک مسیر URL که مشخص منطبق source و یا regex الگوی URL، مرورگر خواهد شد محتویات فایل را در داده destination URL به جای.

مشخص URL بازنویسی با ایجاد یک rewrites ویژگی است که شامل آرایه ای از اشیاء (به نام "قوانین بازنویسی"). در هر قانون ، یک الگوی 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

یک فایل محلی که باید وجود داشته باشد

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

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

شما می توانید با استفاده از 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 با Hosting در مناطق زیر استفاده کنید:

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

در اینجا ساختار اساسی برای یک است 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 مشخصه بازنویسی به محتوای پویا در خدمت توسط توابع ابر یا ابر اجرا تاثیر نمی گذارد.

تطبیق الگوی گلوب

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

  }
}