Google is committed to advancing racial equity for Black communities. See how.
این صفحه به‌وسیله ‏Cloud Translation API‏ ترجمه شده است.
Switch to English

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

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

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

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

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

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

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

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

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

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

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

می توانید یک مثال کامل برای پیکربندی firebase.json (که فقط Firebase Hosting را پوشش می دهد) در پایین این صفحه پیدا کنید. توجه داشته باشید که یک فایل firebase.json همچنین می تواند شامل پیکربندی برای سایر سرویس های Firebase باشد .

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

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

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

اگر مرورگری 404 Not Found در دامنه یا زیر دامنه شما ایجاد کند ، محتوای این صفحه 404.html سفارشی را 404.html .

تغییر مسیرها را پیکربندی کنید

اختیاری
اگر صفحه را جابجا کرده اید یا برای کوتاه کردن URL ها ، از هدایت URL استفاده کنید تا از پیوندهای خراب جلوگیری کند. به عنوان مثال ، می توانید یک مرورگر را از example.com/team به example.com/about.html .

با ایجاد یک ویژگی redirects که شامل آرایه ای از اشیا است (به نام "قوانین هدایت") ، هدایت URL ها را مشخص کنید. در هر قانون ، الگوی URL را مشخص کنید که اگر با مسیر URL درخواست مطابقت داشته باشد ، باعث می شود میزبانی وب با هدایت به URL مقصد مشخص شده پاسخ دهد.

در اینجا ساختار اصلی برای ویژگی redirects . این مثال با ایجاد یک درخواست جدید به /bar درخواست ها را به /foo هدایت می کند.

"hosting": {
  // ...

  // Returns a permanent redirect to "/bar" for requests to "/foo" (but not "/foo/**")
  "redirects": [ {
    "source": "/foo",
    "destination": "/bar",
    "type": 301
  } ]
}

ویژگی redirects شامل آرایه ای از قوانین redirect است که در آن هر قانون باید فیلدهای جدول زیر را شامل شود.

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

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

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

  • برای تعیین یک گلوب از source (توصیه می شود) استفاده کنید .
  • برای تعیین عبارت منظم RE2 از regex استفاده کنید.
destination

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

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

type

کد پاسخ HTTP

  • از نوع 301 برای "دائماً منتقل شده" استفاده کنید
  • از نوع 302 برای «یافتن» استفاده کنید (تغییر مسیر موقت)

بخشهای URL را برای تغییر مسیرها بگیرید

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

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

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

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

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

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

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

  • برای تعیین یک گلوب از source (توصیه می شود) استفاده کنید .
  • برای تعیین عبارت منظم RE2 از regex استفاده کنید.
destination

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

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

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

برای سرویس دهی از یک URL میزبانی Firebase می توانید از rewrites استفاده کنید. مثال زیر گزیده ای از ارائه محتوای پویا با استفاده از عملکردهای Cloud است .

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

"hosting": {
  // ...

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

پس از افزودن این قانون بازنویسی و استقرار در Firebase (با استفاده از firebase deploy ) ، عملکرد شما از طریق URL های زیر قابل دسترسی است:

  • زیر دامنه فایربیس شما:
    PROJECT_ID .web.app/bigben و PROJECT_ID .firebaseapp.com/bigben

  • دامنه های سفارشی متصل:
    CUSTOM_DOMAIN /bigben

درخواست مستقیم به ظرف Cloud Run

برای دسترسی به ظرف Cloud Run از طریق URL میزبانی Firebase می توانید از طریق rewrites استفاده کنید. مثال زیر گزیده ای از ارائه محتوای پویا با استفاده از 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

برای ایجاد پیوندهای پویا دامنه سفارشی می توانید از 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 تنظیم true

سرصفحه ها را پیکربندی کنید

اختیاری
سرصفحه ها به مشتری و سرور اجازه می دهند اطلاعات اضافی را همراه با درخواست یا پاسخ منتقل کنند. برخی از سرآیند ها می توانند بر نحوه مدیریت مرورگر صفحه و محتوای آن تأثیر بگذارند ، از جمله کنترل دسترسی ، تأیید اعتبار ، ذخیره سازی و رمزگذاری.

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

  • برای تعیین یک گلوب از source (توصیه می شود) استفاده کنید .
  • برای تعیین عبارت منظم RE2 از regex استفاده کنید.

برای ایجاد یک هدر متناسب با صفحه 404 سفارشی خود ، از 404.html به عنوان مقدار source یا regex استفاده کنید.

آرایه ای از headers (فرعی)

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

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

key نام هدر ، به عنوان مثال Cache-Control
value مقدار هدر ، به عنوان مثال max-age=7200

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

برنامه های افزودنی .html کنترل کنید

اختیاری
ویژگی cleanUrls به شما امکان می دهد که آیا URL ها باید .html داشته باشند یا نه.

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

در اینجا نحوه کنترل گنجاندن .html در URL ها با cleanUrls ویژگی cleanUrls شده است:

"hosting": {
  // ...

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

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

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

  • هنگامی که 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 پوشه node_modules ، که خود می تواند در یک زیر دایرکتوری دلخواه از فهرست public

  • **/*.@(jpg|jpeg|gif|png) - با هر پرونده ای در یک زیر شاخه دلخواه مطابقت دارد که دقیقاً با یکی از موارد زیر .jpg : .jpg ، .jpeg ، .gif یا .png

مثال پیکربندی میزبان کامل

در زیر یک مثال کامل پیکربندی 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",

  }
}