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. ללמוד איך.

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

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

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

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

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

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

  • הוספה 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. Custom 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 תכונה מציין את הקבצים להתעלם על לפרוס. זה יכול לקחת גושים באותו אופן שבו 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 תוכן לקובץ.

אירוח Firebase יציג את התוכן של המנהג הזה 404.html הדף אם דפדפן מפעילה 404 Not Found שגיאה או כתת-דומיין שלך.

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

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

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

הנה את המבנה הבסיסי עבור 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 ערך כנגד כל נתיבי כתובת האתר בתחילת כל בקשה (לפני שהדפדפן קובע אם קובץ או תיקיה קיים נתיב). אם נמצאת התאמה, אז שרת המקור אירוח Firebase שולח תגובה HTTPS הפניה לספר את הדפדפן כדי להגיש בקשה חדשה על destination URL.

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

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

destination

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

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

type

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

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

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

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

הגדר שכתובים

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

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

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

הנה את המבנה הבסיסי עבור 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 דפוס URL. כאשר בקשה מעוררת בכלל שכתוב, חוזר דפדפן התוכן הממשי של שצוין destination הקובץ במקום HTTP redirect.

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

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

destination

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

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

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

אתה יכול להשתמש 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 ), הפונקציה אינה נגישה דרך ה- 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 לגשת מיכל ענן הפעלת מכתובת 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 ), התמונה מיכל שלך היא נגיש דרך ה- URL הבא:

  • תת הדומיינים שלך ב- 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

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

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

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

הגדר כותרות

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

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

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

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

  }
}