হোস্টিং আচরণ কনফিগার করুন

Firebase Hosting মাধ্যমে, আপনি আপনার সাইটের অনুরোধের জন্য কাস্টমাইজড হোস্টিং আচরণ কনফিগার করতে পারেন।

Hosting জন্য আপনি কী কনফিগার করতে পারেন?

  • আপনার স্থানীয় প্রকল্প ডিরেক্টরিতে কোন ফাইলগুলি আপনি Firebase Hosting এ স্থাপন করতে চান তা নির্দিষ্ট করুন। কীভাবে করবেন তা শিখুন।

  • একটি কাস্টমাইজড 404/Not Found পৃষ্ঠা পরিবেশন করুন। কীভাবে তা জানুন।

  • আপনার সরানো বা মুছে ফেলা পৃষ্ঠাগুলির জন্য redirects সেট আপ করুন। কীভাবে করবেন তা জানুন।

  • এই উদ্দেশ্যে যেকোনো একটির জন্য rewrites সেট আপ করুন:

  • কোনও অনুরোধ বা প্রতিক্রিয়া সম্পর্কে অতিরিক্ত তথ্য প্রদানের জন্য headers যোগ করুন, যেমন ব্রাউজারগুলি কীভাবে পৃষ্ঠা এবং এর বিষয়বস্তু পরিচালনা করবে (প্রমাণীকরণ, ক্যাশিং, এনকোডিং ইত্যাদি)। কীভাবে করবেন তা শিখুন।

  • ব্যবহারকারীর ভাষা পছন্দ এবং/অথবা দেশের উপর ভিত্তি করে নির্দিষ্ট কন্টেন্ট পরিবেশন করার জন্য আন্তর্জাতিকীকরণ (i18n) পুনর্লিখন সেট আপ করুন। কীভাবে তা জানুন (বিভিন্ন পৃষ্ঠা)।

আপনার Hosting কনফিগারেশন কোথায় সংজ্ঞায়িত করবেন?

আপনি আপনার firebase.json ফাইলে আপনার Firebase Hosting কনফিগারেশন সংজ্ঞায়িত করেন। আপনি যখন firebase init কমান্ডটি চালান তখন Firebase স্বয়ংক্রিয়ভাবে আপনার প্রকল্প ডিরেক্টরির মূলে আপনার firebase.json ফাইলটি তৈরি করে।

এই পৃষ্ঠার নীচে আপনি একটি সম্পূর্ণ firebase.json কনফিগারেশন উদাহরণ (শুধুমাত্র Firebase Hosting কভার করে) খুঁজে পেতে পারেন। মনে রাখবেন যে একটি firebase.json ফাইলে অন্যান্য Firebase পরিষেবার জন্য কনফিগারেশনও থাকতে পারে।

আপনি Hosting REST API ব্যবহার করে ডিপ্লয় করা firebase.json কন্টেন্ট পরীক্ষা করতে পারেন।

Hosting প্রতিক্রিয়াগুলির অগ্রাধিকার ক্রম

এই পৃষ্ঠায় বর্ণিত বিভিন্ন Firebase Hosting কনফিগারেশন বিকল্পগুলি কখনও কখনও ওভারল্যাপ করতে পারে। যদি কোনও দ্বন্দ্ব দেখা দেয়, তাহলে Hosting নিম্নলিখিত অগ্রাধিকার ক্রম ব্যবহার করে তার প্রতিক্রিয়া নির্ধারণ করে:

  1. /__/* পাথ সেগমেন্ট দিয়ে শুরু হওয়া সংরক্ষিত নেমস্পেস
  2. কনফিগার করা পুনঃনির্দেশনা
  3. হুবহু মিলে যাওয়া স্ট্যাটিক কন্টেন্ট
  4. কনফিগার করা পুনর্লিখন
  5. কাস্টম 404 পৃষ্ঠা
  6. ডিফল্ট ৪০৪ পৃষ্ঠা

যদি আপনি i18n rewrites ব্যবহার করেন, তাহলে আপনার "i18n কন্টেন্ট" সামঞ্জস্য করার জন্য exact-match এবং 404 হ্যান্ডলিং অগ্রাধিকার ক্রমটি সম্প্রসারিত করা হবে।

কোন ফাইল স্থাপন করতে হবে তা নির্দিষ্ট করুন

ডিফল্ট firebase.json ফাইলে অন্তর্ভুক্ত ডিফল্ট বৈশিষ্ট্য — public এবং ignore — আপনার প্রকল্প ডিরেক্টরিতে কোন ফাইলগুলি আপনার Firebase প্রকল্পে স্থাপন করা উচিত তা নির্ধারণ করে।

firebase.json ফাইলের ডিফল্ট hosting কনফিগারেশনটি এরকম দেখাচ্ছে:

"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 অ্যাট্রিবিউটটি ডিপ্লয়ের সময় কোন ফাইলগুলিকে উপেক্ষা করতে হবে তা নির্দিষ্ট করে। এটি 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 ত্রুটি ট্রিগার করে, তাহলে Firebase Hosting এই কাস্টম 404.html পৃষ্ঠার বিষয়বস্তু প্রদর্শন করবে।

পুনঃনির্দেশ কনফিগার করুন

ঐচ্ছিক
যদি আপনি কোনও পৃষ্ঠা সরান, তাহলে ভাঙা লিঙ্কগুলি প্রতিরোধ করতে অথবা URL গুলি ছোট করতে একটি URL পুনঃনির্দেশ ব্যবহার করুন। উদাহরণস্বরূপ, আপনি example.com/team থেকে example.com/about.html এ একটি ব্রাউজার পুনঃনির্দেশ করতে পারেন।

একটি redirects অ্যাট্রিবিউট তৈরি করে URL রিডাইরেক্ট নির্দিষ্ট করুন যাতে অবজেক্টের একটি অ্যারে থাকে (যাকে "রিডাইরেক্ট রুলস" বলা হয়)। প্রতিটি নিয়মে, একটি URL প্যাটার্ন নির্দিষ্ট করুন যা অনুরোধ URL পাথের সাথে মিলে গেলে, Hosting নির্দিষ্ট গন্তব্য 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 বৈশিষ্ট্যটিতে পুনঃনির্দেশ নিয়মের একটি অ্যারে রয়েছে, যেখানে প্রতিটি নিয়মে নীচের টেবিলের ক্ষেত্রগুলি অন্তর্ভুক্ত করতে হবে।

প্রতিটি অনুরোধের শুরুতে (ব্রাউজার নির্ধারণ করার আগে যে কোনও ফাইল বা ফোল্ডার সেই পথে বিদ্যমান কিনা) সমস্ত URL পাথের সাথে Firebase Hosting source বা regex মান তুলনা করে। যদি কোনও মিল পাওয়া যায়, তাহলে Firebase Hosting অরিজিন সার্ভার একটি HTTPS রিডাইরেক্ট প্রতিক্রিয়া পাঠায় যা ব্রাউজারকে destination URL এ একটি নতুন অনুরোধ করতে বলে।

মাঠ বিবরণ
redirects
source (প্রস্তাবিত)
অথবা regex

একটি URL প্যাটার্ন যা প্রাথমিক অনুরোধ URL এর সাথে মিলে গেলে, Hosting পুনঃনির্দেশ প্রয়োগ করতে ট্রিগার করে

destination

একটি স্ট্যাটিক URL যেখানে ব্রাউজার একটি নতুন অনুরোধ করবে

এই URLটি একটি আপেক্ষিক বা একটি পরম পথ হতে পারে।

type

HTTPS প্রতিক্রিয়া কোড

  • 'স্থায়ীভাবে সরানো' এর জন্য 301 টাইপ ব্যবহার করুন
  • 'Found' (Temporary Redirect) এর জন্য 302 টাইপ ব্যবহার করুন।

পুনঃনির্দেশের জন্য URL অংশগুলি ক্যাপচার করুন

ঐচ্ছিক
কখনও কখনও, আপনাকে একটি পুনঃনির্দেশ নিয়মের URL প্যাটার্নের নির্দিষ্ট অংশগুলি ( source বা regex মান) ক্যাপচার করতে হতে পারে, তারপর নিয়মের destination পথে এই অংশগুলি পুনরায় ব্যবহার করতে হতে পারে।

পুনর্লিখন কনফিগার করুন

ঐচ্ছিক
একাধিক URL-এর জন্য একই কন্টেন্ট দেখানোর জন্য পুনর্লিখন ব্যবহার করুন। প্যাটার্ন ম্যাচিংয়ের ক্ষেত্রে পুনর্লিখন বিশেষভাবে কার্যকর, কারণ আপনি প্যাটার্নের সাথে মেলে এমন যেকোনো URL গ্রহণ করতে পারেন এবং ক্লায়েন্ট-সাইড কোডকে কী প্রদর্শন করতে হবে তা নির্ধারণ করতে দিতে পারেন।

নেভিগেশনের জন্য HTML5 pushState ব্যবহার করে এমন অ্যাপগুলিকে সমর্থন করার জন্য আপনি পুনর্লিখনও ব্যবহার করতে পারেন। যখন কোনও ব্রাউজার নির্দিষ্ট source বা regex URL প্যাটার্নের সাথে মেলে এমন একটি URL পাথ খোলার চেষ্টা করে, তখন ব্রাউজারটিকে destination URL-এ ফাইলের বিষয়বস্তু দেওয়া হবে।

একটি rewrites বৈশিষ্ট্য তৈরি করে URL পুনর্লিখন নির্দিষ্ট করুন যাতে বস্তুর একটি অ্যারে থাকে (যাকে "পুনর্লিখনের নিয়ম" বলা হয়)। প্রতিটি নিয়মে, একটি URL প্যাটার্ন নির্দিষ্ট করুন যা অনুরোধ URL পাথের সাথে মিলে গেলে, Hosting এমনভাবে প্রতিক্রিয়া জানাতে ট্রিগার করে যেন পরিষেবাটিকে নির্দিষ্ট গন্তব্য 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 Hosting শুধুমাত্র তখনই পুনর্লিখনের নিয়ম প্রয়োগ করে যখন নির্দিষ্ট source বা regex URL প্যাটার্নের সাথে মেলে এমন একটি URL পাথে কোনও ফাইল বা ডিরেক্টরি বিদ্যমান না থাকে। যখন কোনও অনুরোধ পুনর্লিখনের নিয়ম চালু করে, তখন ব্রাউজার HTTP পুনঃনির্দেশের পরিবর্তে নির্দিষ্ট destination ফাইলের প্রকৃত বিষয়বস্তু ফেরত দেয়।

মাঠ বিবরণ
rewrites
source (প্রস্তাবিত)
অথবা regex

একটি URL প্যাটার্ন যা, যদি প্রাথমিক অনুরোধ URL এর সাথে মিলে যায়, তাহলে Hosting পুনর্লিখন প্রয়োগ করতে ট্রিগার করে

destination

একটি স্থানীয় ফাইল যা অবশ্যই বিদ্যমান থাকবে

এই URLটি একটি আপেক্ষিক বা একটি পরম পথ হতে পারে।

কোনও ফাংশনে সরাসরি অনুরোধ করুন

আপনি Firebase Hosting URL থেকে একটি ফাংশন পরিবেশন করার জন্য rewrites ব্যবহার করতে পারেন। নিম্নলিখিত উদাহরণটি Cloud Functions ব্যবহার করে গতিশীল সামগ্রী পরিবেশনের একটি উদ্ধৃতি।

উদাহরণস্বরূপ, আপনার Hosting সাইটের /bigben পৃষ্ঠা থেকে সমস্ত অনুরোধকে bigben ফাংশনটি কার্যকর করার জন্য নির্দেশিত করতে:

"hosting": {
  // ...

  // Directs all requests from the page `/bigben` to execute the `bigben` function
  "rewrites": [ {
    "source": "/bigben",
    "function": {
      "functionId": "bigben",
      "region": "us-central1"  // optional (see note below)
      "pinTag": true           // optional (see note below)
    }
  } ]
}

এই পুনর্লিখনের নিয়মটি যোগ করার পরে এবং Firebase-এ স্থাপন করার পরে ( firebase deploy ব্যবহার করে), আপনার ফাংশনটি নিম্নলিখিত URL গুলির মাধ্যমে পৌঁছানো যাবে:

  • আপনার Firebase সাবডোমেন:
    PROJECT_ID .web.app/bigben এবং PROJECT_ID .firebaseapp.com/bigben

  • যেকোনো সংযুক্ত কাস্টম ডোমেন :
    CUSTOM_DOMAIN /bigben

যখন Firebase Hosting কোনও ফাংশনে ট্র্যাফিক ফরোয়ার্ড করে, তখন ফাংশনটি সম্পূর্ণ মূল অনুরোধ পথ এবং কোয়েরি স্ট্রিং গ্রহণ করে। উদাহরণস্বরূপ, আপনার Hosting সাইটে /bigben/hello/world?foo=bar এ একটি অনুরোধ সম্পূর্ণ পাথ এবং কোয়েরি অক্ষত রেখে ফাংশনে প্রেরণ করা হয়। নিশ্চিত করুন যে আপনার ফাংশন হ্যান্ডলারটি সম্পূর্ণ পরম URL পরিচালনা করার জন্য লেখা আছে, কেবল পুনর্লিখনে সংজ্ঞায়িত বেস পাথ নয়।

Hosting এর মাধ্যমে ফাংশনে অনুরোধ পুনঃনির্দেশিত করার সময়, সমর্থিত HTTP অনুরোধ পদ্ধতিগুলি হল GET , POST , HEAD , PUT , DELETE , PATCH এবং OPTIONSREPORT বা PROFIND মতো অন্যান্য পদ্ধতি সমর্থিত নয়।

Cloud Run কন্টেইনারে সরাসরি অনুরোধ করুন

আপনি Firebase Hosting URL থেকে Cloud Run কন্টেইনার অ্যাক্সেস করতে rewrites ব্যবহার করতে পারেন। নিম্নলিখিত উদাহরণটি Cloud Run ব্যবহার করে গতিশীল কন্টেন্ট পরিবেশনের একটি অংশ।

উদাহরণস্বরূপ, আপনার Hosting সাইটের /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

Hosting সহ Cloud Run কন্টেইনারে অনুরোধগুলি পুনঃনির্দেশিত করার সময়, সমর্থিত HTTP অনুরোধ পদ্ধতিগুলি হল GET , POST , HEAD , PUT , DELETE , PATCH এবং OPTIONSREPORT বা PROFIND মতো অন্যান্য পদ্ধতি সমর্থিত নয়।

সেরা পারফরম্যান্সের জন্য, নিম্নলিখিত অঞ্চলগুলি ব্যবহার করে আপনার Cloud Run পরিষেবা Hosting সাথে একত্রিত করুন:

  • us-west1
  • us-central1
  • us-east1
  • europe-west1
  • asia-east1

Hosting থেকে Cloud Run পুনর্লিখন নিম্নলিখিত অঞ্চলে সমর্থিত:

  • asia-east1
  • asia-east2
  • asia-northeast1
  • asia-northeast2
  • asia-northeast3
  • asia-south1
  • asia-south2
  • asia-southeast1
  • asia-southeast2
  • australia-southeast1
  • australia-southeast2
  • europe-central2
  • europe-north1
  • europe-southwest1
  • europe-west1
  • europe-west12
  • europe-west2
  • europe-west3
  • europe-west4
  • europe-west6
  • europe-west8
  • europe-west9
  • me-central1
  • me-west1
  • northamerica-northeast1
  • northamerica-northeast2
  • southamerica-east1
  • southamerica-west1
  • us-central1
  • us-east1
  • us-east4
  • us-east5
  • us-south1
  • us-west1
  • us-west2
  • us-west3
  • us-west4
  • us-west1
  • us-central1
  • us-east1
  • europe-west1
  • asia-east1

কাস্টম ডোমেইন Dynamic Links তৈরি করতে আপনি rewrites ব্যবহার করতে পারেন। Dynamic Links জন্য একটি কাস্টম ডোমেইন সেট আপ করার বিষয়ে বিস্তারিত তথ্যের জন্য Dynamic Links ডকুমেন্টেশন দেখুন।

  • শুধুমাত্র Dynamic Links জন্য আপনার কাস্টম ডোমেন ব্যবহার করুন

    "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
      } ]
    }
  • Dynamic Links জন্য ব্যবহার করার জন্য কাস্টম ডোমেন পাথ প্রিফিক্স নির্দিষ্ট করুন

    "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 ফাইলে Dynamic Links কনফিগার করার জন্য নিম্নলিখিতগুলি প্রয়োজন:

মাঠ বিবরণ
appAssociation

AUTO সেট করতে হবে

  • যদি আপনি আপনার কনফিগারেশনে এই বৈশিষ্ট্যটি অন্তর্ভুক্ত না করেন, তাহলে appAssociation এর জন্য ডিফল্ট হল AUTO
  • এই বৈশিষ্ট্যটি AUTO তে সেট করে, Hosting যখন অনুরোধ করা হয় তখন গতিশীলভাবে assetlinks.json এবং apple-app-site-association ফাইল তৈরি করতে পারে।
rewrites
source

Dynamic Links জন্য আপনি যে পথটি ব্যবহার করতে চান

URL-এর পাথ পুনর্লিখনের নিয়মের বিপরীতে, Dynamic Links জন্য পুনর্লিখনের নিয়মগুলিতে নিয়মিত এক্সপ্রেশন থাকতে পারে না।

dynamicLinks true হিসেবে সেট করতে হবে

হেডার কনফিগার করুন

ঐচ্ছিক
হেডারগুলি ক্লায়েন্ট এবং সার্ভারকে একটি অনুরোধ বা প্রতিক্রিয়ার সাথে অতিরিক্ত তথ্য প্রেরণ করার অনুমতি দেয়। কিছু হেডার ব্রাউজার কীভাবে পৃষ্ঠা এবং এর বিষয়বস্তু পরিচালনা করে, যার মধ্যে অ্যাক্সেস নিয়ন্ত্রণ, প্রমাণীকরণ, ক্যাশিং এবং এনকোডিং অন্তর্ভুক্ত, তা প্রভাবিত করতে পারে।

হেডার অবজেক্টের একটি অ্যারে ধারণকারী একটি headers অ্যাট্রিবিউট তৈরি করে কাস্টম, ফাইল-নির্দিষ্ট রেসপন্স হেডার নির্দিষ্ট করুন। প্রতিটি অবজেক্টে, একটি URL প্যাটার্ন নির্দিষ্ট করুন যা অনুরোধ URL পাথের সাথে মিলে গেলে, নির্দিষ্ট কাস্টম রেসপন্স হেডার প্রয়োগ করতে 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

একটি URL প্যাটার্ন যা প্রাথমিক অনুরোধ URL এর সাথে মিলে গেলে, Hosting কাস্টম হেডার প্রয়োগ করতে ট্রিগার করে

আপনার কাস্টম 404 পৃষ্ঠার সাথে মেলে এমন একটি হেডার তৈরি করতে, আপনার source বা regex মান হিসেবে 404.html ব্যবহার করুন।

(উপ-) headers অ্যারে

অনুরোধের পথে Hosting যে কাস্টম হেডারগুলি প্রয়োগ করে

প্রতিটি সাব-হেডারে অবশ্যই একটি key এবং value জোড়া অন্তর্ভুক্ত করতে হবে (পরবর্তী দুটি সারি দেখুন)।

key হেডারের নাম, উদাহরণস্বরূপ Cache-Control
value হেডারের মান, উদাহরণস্বরূপ max-age=7200

আপনি Hosting বিভাগে Cache-Control সম্পর্কে আরও জানতে পারেন যা ডায়নামিক কন্টেন্ট পরিবেশন এবং মাইক্রোসার্ভিসেস হোস্টিং বর্ণনা করে। আপনি CORS হেডার সম্পর্কেও আরও জানতে পারেন।

.html এক্সটেনশন নিয়ন্ত্রণ করুন

ঐচ্ছিক
cleanUrls অ্যাট্রিবিউট আপনাকে URL গুলিতে .html এক্সটেনশন অন্তর্ভুক্ত করা উচিত কিনা তা নিয়ন্ত্রণ করতে দেয়।

যখন true , তখন Hosting আপলোড করা ফাইল URL গুলি থেকে স্বয়ংক্রিয়ভাবে .html এক্সটেনশনটি বাদ দেয়। যদি অনুরোধে একটি .html এক্সটেনশন যোগ করা হয়, তাহলে Hosting একই পথে 301 পুনঃনির্দেশনা সম্পাদন করে কিন্তু .html এক্সটেনশনটি বাদ দেয়।

cleanUrls অ্যাট্রিবিউট অন্তর্ভুক্ত করে URL-এ .html অন্তর্ভুক্তি কীভাবে নিয়ন্ত্রণ করবেন তা এখানে দেওয়া হল:

"hosting": {
  // ...

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

ট্রেইলিং স্ল্যাশ নিয়ন্ত্রণ করুন

ঐচ্ছিক
trailingSlash অ্যাট্রিবিউট আপনাকে স্ট্যাটিক কন্টেন্ট URL গুলিতে ট্রেলিং স্ল্যাশ অন্তর্ভুক্ত করা উচিত কিনা তা নিয়ন্ত্রণ করতে দেয়।

  • যখন true , তখন Hosting একটি ট্রেলিং স্ল্যাশ যোগ করার জন্য URL গুলিকে পুনঃনির্দেশিত করে।
  • যখন false থাকে, তখন Hosting একটি ট্রেলিং স্ল্যাশ অপসারণের জন্য URL গুলিকে পুনঃনির্দেশিত করে।
  • যখন নির্দিষ্ট না করা থাকে, তখন Hosting শুধুমাত্র ডিরেক্টরি ইনডেক্স ফাইলের জন্য ট্রেলিং স্ল্যাশ ব্যবহার করে (উদাহরণস্বরূপ, about/index.html )।

trailingSlash অ্যাট্রিবিউট যোগ করে কীভাবে ট্রেইলিং স্ল্যাশ নিয়ন্ত্রণ করবেন তা এখানে দেওয়া হল:

"hosting": {
  // ...

  // Removes trailing slashes from URLs
  "trailingSlash": false
}

trailingSlash অ্যাট্রিবিউটটি Cloud Functions বা Cloud Run দ্বারা পরিবেশিত গতিশীল কন্টেন্টের পুনর্লিখনের উপর প্রভাব ফেলে না।

গ্লব প্যাটার্ন ম্যাচিং

Firebase Hosting কনফিগারেশন অপশনগুলি extglob-এর সাথে গ্লোব প্যাটার্ন ম্যাচিং নোটেশনের ব্যাপক ব্যবহার করে, যেমনটি Git gitignore নিয়মগুলি পরিচালনা করে এবং Bower নিয়মগুলি ignore করে। এই উইকি পৃষ্ঠাটি আরও বিস্তারিত রেফারেন্স, তবে এই পৃষ্ঠায় ব্যবহৃত উদাহরণগুলির ব্যাখ্যা নীচে দেওয়া হল:

  • firebase.json — শুধুমাত্র public ডিরেক্টরির রুটে থাকা firebase.json ফাইলের সাথে মেলে।

  • ** — একটি ইচ্ছামত সাব-ডিরেক্টরিতে যেকোনো ফাইল বা ফোল্ডারের সাথে মেলে

  • * — শুধুমাত্র public ডিরেক্টরির রুটে থাকা ফাইল এবং ফোল্ডারগুলির সাথে মেলে

  • **/.* — একটি ইচ্ছামত সাব-ডিরেক্টরিতে . দিয়ে শুরু হওয়া যেকোনো ফাইল (সাধারণত লুকানো ফাইল, যেমন .git ফোল্ডারে) মেলায় .

  • **/node_modules/**node_modules ফোল্ডারের একটি ইচ্ছামত সাব-ডিরেক্টরিতে থাকা যেকোনো ফাইল বা ফোল্ডারের সাথে মিল করে, যা নিজেই public ডিরেক্টরির একটি ইচ্ছামত সাব-ডিরেক্টরিতে থাকতে পারে।

  • **/*.@(jpg|jpeg|gif|png) — একটি ইচ্ছামত সাব-ডিরেক্টরিতে থাকা যেকোনো ফাইলের সাথে মিল করে যা নিম্নলিখিতগুলির মধ্যে একটি দিয়ে শেষ হয়: .jpg , .jpeg , .gif , অথবা .png

সম্পূর্ণ Hosting কনফিগারেশনের উদাহরণ

Firebase Hosting এর জন্য একটি সম্পূর্ণ firebase.json কনফিগারেশন উদাহরণ নিচে দেওয়া হল। মনে রাখবেন যে একটি 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",

  }
}