Check out what’s new from Firebase@ Google I/O 2021, and join our alpha program for early access to the new Remote Config personalization feature. Learn more

הגדר את התנהגות האירוח

באמצעות Firebase Hosting תוכלו להגדיר התנהגות אירוח מותאמת אישית לבקשות לאתר שלכם.

מה אתה יכול להגדיר עבור אירוח?

  • ציין אילו קבצים בספריית הפרויקטים המקומית שלך ברצונך לפרוס לאירוח Firebase. ללמוד איך.

  • הגישו דף 404 מותאם אישית / לא נמצא. ללמוד איך.

  • הגדר redirects לדפים שהעברת או מחקת. ללמוד איך.

  • הגדר rewrites לכל אחת מהמטרות הבאות:

    • הראה את אותו התוכן עבור מספר כתובות אתרים. ללמוד איך.

    • הגיש פונקציה או גש למיכל Cloud Run מכתובת URL לאירוח. למד כיצד: פונקציה או מיכל .

    • צור קישור דינמי מותאם אישית לדומיין. ללמוד איך.

  • הוסף headers בכדי להעביר מידע נוסף אודות בקשה או תגובה, כגון אופן הטיפול בדפדפנים בדף ובתוכנו (אימות, אחסון במטמון, קידוד וכו '). ללמוד איך.

  • הגדר שכתוב בינלאומי (i18n) כדי להגיש תוכן ספציפי על סמך העדפת השפה של המשתמש ו / או המדינה. למד כיצד (עמוד אחר).

היכן אתה מגדיר את תצורת האירוח שלך?

אתה מגדיר את תצורת אירוח Firebase בקובץ firebase.json שלך. Firebase יוצר באופן אוטומטי את קובץ firebase.json בשורש ספריית הפרויקט שלך כאשר אתה מריץ את הפקודה firebase init .

תוכל למצוא דוגמה מלאה לתצורה של firebase.json (המכסה רק את אירוח Firebase) בתחתית עמוד זה. שים לב שקובץ firebase.json יכול להכיל תצורות גם עבור שירותי Firebase אחרים .

אתה יכול לבדוק את התוכן הפרוס firebase.json באמצעות ה- REST API של אירוח .

סדר עדיפות לתגובות אירוח

אפשרויות התצורה השונות של אירוח 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. ערך ברירת המחדל הוא ספריה בשם 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 בדומיין או בתת-הדומיין שלך.

הגדר הפניות מחדש

אופציונאלי
השתמש בכתובת אתר להפניה מחדש כדי למנוע קישורים שבורים אם העברת דף או לקצר כתובות אתרים. לדוגמא, תוכל להפנות דפדפן מ- example.com/team ל- example.com/about.html .

ציין הפניות מחדש של כתובות אתרים על ידי יצירת תכונה של redirects המכילה מערך של אובייקטים (הנקראים "כללי הפניה מחדש"). בכל כלל, ציין תבנית כתובת אתר, שאם היא תואמת לנתיב כתובת האתר של הבקשה, גורמת לאירוח להגיב עם הפניה מחדש לכתובת אתר היעד שצוינה.

הנה המבנה הבסיסי של מאפיין 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 .

שדה תיאור
redirects
source (מומלץ)
או regex

דפוס כתובת אתר, אם הוא תואם לכתובת האתר הבקשה הראשונית, מפעיל את אירוח להחיל את ההפניה מחדש

destination

כתובת אתר סטטית שבה הדפדפן צריך להגיש בקשה חדשה

כתובת אתר זו יכולה להיות נתיב יחסי או נתיב מוחלט.

type

קוד התגובה של HTTPS

  • השתמש בסוג של 301 עבור 'הועבר לצמיתות'
  • השתמש בסוג של 302 עבור 'נמצא' (הפניה זמנית)

צלם פלחי כתובות אתרים להפניות מחדש

אופציונאלי
לפעמים ייתכן שיהיה עליך ללכוד פלחים ספציפיים של תבנית כתובת האתר של כלל הפניה ( source או ערך regex ) ואז להשתמש מחדש בפלחים אלה בנתיב destination של הכלל.

הגדר שכתובים מחדש

אופציונאלי
השתמש בשכתוב כדי להציג את אותו התוכן עבור מספר כתובות אתרים. שכתובים שימושיים במיוחד בהתאמת תבניות, מכיוון שאתה יכול לקבל כל כתובת אתר שתואמת לתבנית ולתת לקוד בצד הלקוח להחליט מה להציג.

אתה יכול גם להשתמש בשכתובים לתמיכה באפליקציות המשתמשות ב- HTML5 pushState לניווט. כאשר דפדפן מנסה לפתוח נתיב URL התואם source שצוין או לתבנית URL regex , הדפדפן יקבל במקום זאת את תוכן הקובץ בכתובת destination .

ציין שכתוב כתובות אתרים על ידי יצירת תכונה של rewrites המכילה מערך של אובייקטים (הנקראים "כללי שכתוב"). בכל כלל, ציין תבנית כתובת אתר שאם תואמת לנתיב כתובת ה- 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 מחיל כלל כתיבה מחדש אם קובץ או ספריה אינם קיימים בנתיב כתובת אתר התואם source שצוין או לתבנית כתובת ה- regex . כאשר בקשה מפעילה כלל כתיבה מחדש, הדפדפן מחזיר את התוכן בפועל של קובץ destination שצוין במקום הפניית HTTP.

שדה תיאור
rewrites
source (מומלץ)
או regex

דפוס כתובת אתר, אם הוא תואם לכתובת האתר הבקשה הראשונית, מפעיל את אירוח להחיל את השכתוב

destination

קובץ מקומי שחייב להתקיים

כתובת אתר זו יכולה להיות נתיב יחסי או נתיב מוחלט.

בקשות ישירות לפונקציה

אתה יכול להשתמש rewrites כדי להגיש פונקציה מכתובת אתר לאירוח Firebase. הדוגמה הבאה היא קטע מהגשת תוכן דינמי באמצעות פונקציות ענן .

לדוגמא, להפנות את כל הבקשות מהדף /bigben באתר האירוח שלך לביצוע פונקציית bigben :

"hosting": {
  // ...

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

לאחר הוספת כלל הכתיבה הזה ופריסה כדי 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 מכתובת אתר לאירוח 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 deploy ל- Firebase (באמצעות פריסת Firebase), ניתן להגיע לתמונת המכולה שלך באמצעות כתובות האתר הבאות:

  • תת-הדומיינים של Firebase שלך:
    PROJECT_ID .web.app/helloworld ו- PROJECT_ID .firebaseapp.com/helloworld

  • כל תחומים מותאמים אישית מחוברים:
    CUSTOM_DOMAIN /helloworld

בעת הפניית בקשות למכולות Cloud Run באמצעות אירוח, שיטות בקשת 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

נתיב שבו ברצונך להשתמש עבור קישורים דינמיים

שלא כמו כללים המשכתבים נתיבים לכתובות אתרים, כללי שכתוב עבור קישורים דינמיים אינם יכולים להכיל ביטויים רגולריים.

dynamicLinks חייב להיות מוגדר true

הגדר כותרות

אופציונאלי
כותרות מאפשרות ללקוח ולשרת להעביר מידע נוסף יחד עם בקשה או תגובה. קבוצות כותרות מסוימות יכולות להשפיע על האופן שבו הדפדפן מטפל בדף ובתוכנו, כולל בקרת גישה, אימות, אחסון במטמון וקידוד.

ציין כותרות תגובה מותאמות אישית וספציפיות לקבצים על ידי יצירת מאפיין headers המכיל מערך של אובייקטים לכותרת. בכל אובייקט, ציין תבנית כתובת 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

דפוס כתובת אתר, אם הוא תואם לכתובת האתר של הבקשה הראשונית, מפעיל את אירוח להחיל את הכותרת המותאמת אישית

כדי ליצור כותרת שתתאים לדף 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 בכתובות אתרים על ידי הכללת תכונה של 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 אינה משפיעה על כתיבה מחדש לתוכן דינמי המוגש על ידי פונקציות Cloud או Cloud Run.

התאמת תבנית גלוב

אפשרויות התצורה של אירוח Firebase עושים שימוש נרחב בסימון ההתאמה של תבניות הגלוב עם extglob, בדומה לאופן שבו Git מטפל בכללי gitignore וידיות Bower 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",

  }
}