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

באמצעות 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 תוכן באמצעות API REST אירוח .

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

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

  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

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

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

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

  }
}