Firebase Hosting মাধ্যমে, আপনি আপনার সাইটের অনুরোধের জন্য কাস্টমাইজড হোস্টিং আচরণ কনফিগার করতে পারেন।
Hosting জন্য আপনি কী কনফিগার করতে পারেন?
আপনার স্থানীয় প্রকল্প ডিরেক্টরিতে কোন ফাইলগুলি আপনি Firebase Hosting এ স্থাপন করতে চান তা নির্দিষ্ট করুন। কীভাবে করবেন তা শিখুন।
একটি কাস্টমাইজড 404/Not Found পৃষ্ঠা পরিবেশন করুন। কীভাবে তা জানুন।
আপনার সরানো বা মুছে ফেলা পৃষ্ঠাগুলির জন্য
redirectsসেট আপ করুন। কীভাবে করবেন তা জানুন।এই উদ্দেশ্যে যেকোনো একটির জন্য
rewritesসেট আপ করুন:একাধিক URL-এর জন্য একই কন্টেন্ট দেখান। কীভাবে তা জানুন।
একটি ফাংশন পরিবেশন করুন অথবা একটি Hosting URL থেকে একটি Cloud Run কন্টেইনার অ্যাক্সেস করুন। কীভাবে তা শিখুন: ফাংশন বা কন্টেইনার ।
একটি কাস্টম ডোমেইন তৈরি করুন Dynamic Link । কীভাবে করবেন তা শিখুন।
কোনও অনুরোধ বা প্রতিক্রিয়া সম্পর্কে অতিরিক্ত তথ্য প্রদানের জন্য
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 নিম্নলিখিত অগ্রাধিকার ক্রম ব্যবহার করে তার প্রতিক্রিয়া নির্ধারণ করে:
-
/__/*পাথ সেগমেন্ট দিয়ে শুরু হওয়া সংরক্ষিত নেমস্পেস - কনফিগার করা পুনঃনির্দেশনা
- হুবহু মিলে যাওয়া স্ট্যাটিক কন্টেন্ট
- কনফিগার করা পুনর্লিখন
- কাস্টম 404 পৃষ্ঠা
- ডিফল্ট ৪০৪ পৃষ্ঠা
যদি আপনি 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
} ]
}
"hosting": {
// ...
// Add the "redirects" attribute within "hosting"
"redirects": [ {
// Returns a permanent redirect to "/bar" for requests to "/foo" (but not "/foo/**")
"source": "/foo",
"destination": "/bar",
"type": 301
}, {
// Returns a permanent redirect to "/bar" for requests to both "/foo" and "/foo/**"
"source": "/foo{,/**}"
"destination": "/bar"
"type": 301
}, {
// Returns a temporary redirect for all requests to files or directories in the "firebase" directory
"source": "/firebase/**",
"destination": "https://firebase.google.com/",
"type": 302
}, {
// A regular expression-based redirect equivalent to the above behavior
"regex": "/firebase/.*",
"destination": "https://firebase.google.com/",
"type": 302
} ]
}
redirects বৈশিষ্ট্যটিতে পুনঃনির্দেশ নিয়মের একটি অ্যারে রয়েছে, যেখানে প্রতিটি নিয়মে নীচের টেবিলের ক্ষেত্রগুলি অন্তর্ভুক্ত করতে হবে।
প্রতিটি অনুরোধের শুরুতে (ব্রাউজার নির্ধারণ করার আগে যে কোনও ফাইল বা ফোল্ডার সেই পথে বিদ্যমান কিনা) সমস্ত URL পাথের সাথে Firebase Hosting source বা regex মান তুলনা করে। যদি কোনও মিল পাওয়া যায়, তাহলে Firebase Hosting অরিজিন সার্ভার একটি HTTPS রিডাইরেক্ট প্রতিক্রিয়া পাঠায় যা ব্রাউজারকে destination URL এ একটি নতুন অনুরোধ করতে বলে।
| মাঠ | বিবরণ | |
|---|---|---|
redirects | ||
source (প্রস্তাবিত)অথবা regex | একটি URL প্যাটার্ন যা প্রাথমিক অনুরোধ URL এর সাথে মিলে গেলে, Hosting পুনঃনির্দেশ প্রয়োগ করতে ট্রিগার করে
| |
destination | একটি স্ট্যাটিক URL যেখানে ব্রাউজার একটি নতুন অনুরোধ করবে এই URLটি একটি আপেক্ষিক বা একটি পরম পথ হতে পারে। | |
type | HTTPS প্রতিক্রিয়া কোড
| |
পুনঃনির্দেশের জন্য URL অংশগুলি ক্যাপচার করুন
ঐচ্ছিক
কখনও কখনও, আপনাকে একটি পুনঃনির্দেশ নিয়মের URL প্যাটার্নের নির্দিষ্ট অংশগুলি ( source বা regex মান) ক্যাপচার করতে হতে পারে, তারপর নিয়মের destination পথে এই অংশগুলি পুনরায় ব্যবহার করতে হতে পারে।
যদি আপনি একটি source ফিল্ড ব্যবহার করেন (অর্থাৎ, আপনার URL প্যাটার্নের জন্য একটি গ্লোব নির্দিষ্ট করে), তাহলে আপনি সেগমেন্টটি সনাক্ত করার জন্য : প্রিফিক্স অন্তর্ভুক্ত করে সেগমেন্টগুলি ক্যাপচার করতে পারেন। যদি আপনাকে সেগমেন্টের পরে অবশিষ্ট URL পাথটিও ক্যাপচার করতে হয়, তাহলে সেগমেন্টের ঠিক পরে * অন্তর্ভুক্ত করুন। উদাহরণস্বরূপ:
"hosting": { // ... "redirects": [ { "source": "/blog/:post*", // captures the entire URL segment beginning at "post" "destination": "https://blog.myapp.com/:post", // includes the entire URL segment identified and captured by the "source" value "type": 301 }, { "source": "/users/:id/profile", // captures only the URL segment "id", but nothing following "destination": "/users/:id/newProfile", // includes the URL segment identified and captured by the "source" value "type": 301 } ] }
যদি আপনি একটি regex ক্ষেত্র ব্যবহার করেন (অর্থাৎ, আপনার URL প্যাটার্নের জন্য একটি RE2 নিয়মিত এক্সপ্রেশন নির্দিষ্ট করে), আপনি নামযুক্ত বা নামহীন RE2 ক্যাপচার গ্রুপ ব্যবহার করে সেগমেন্ট ক্যাপচার করতে পারেন। নামযুক্ত ক্যাপচার গ্রুপগুলি destination ক্ষেত্রে একটি : উপসর্গ সহ ব্যবহার করা যেতে পারে, যখন নামহীন ক্যাপচার গ্রুপগুলি 1 থেকে সূচীকৃত regex মানের সংখ্যাসূচক সূচক দ্বারা রেফারেন্স করা যেতে পারে। উদাহরণস্বরূপ:
"hosting": { // ... "redirects": [ { "regex": "/blog/(?P<post>.+)", // if you're familiar with PCRE, be aware that RE2 requires named capture groups to begin with ?P "destination": "https://blog.myapp.com/:post", // includes the entire URL segment identified and captured by the `regex` value "type": 301 }, { "regex": "/users/(\d+)/profile", // uses the \d directive to only match numerical path segments "destination": "/users/:1/newProfile", // the first capture group to be seen in the `regex` value is named 1, and so on "type": 301 } ] }
পুনর্লিখন কনফিগার করুন
ঐচ্ছিক
একাধিক 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"
} ]
}
"hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { // Serves index.html for requests to files or directories that do not exist "source": "**", "destination": "/index.html" }, { // Serves index.html for requests to both "/foo" and "/foo/**" // Using "/foo/**" only matches paths like "/foo/xyz", but not "/foo" "source": "/foo{,/**}", "destination": "/index.html" }, { // A regular expression-based rewrite equivalent to the above behavior "regex": "/foo(/.*)?", "destination": "/index.html" }, { // Excludes specified pathways from rewrites "source": "!/@(js|css)/**", "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)
}
} ]
}
যদি
hosting.rewritesকনফিগারেশনের একটিfunctionব্লক থেকেregionবাদ দেওয়া হয়, তাহলে Firebase CLI স্বয়ংক্রিয়ভাবে ফাংশনের সোর্স কোড থেকে অঞ্চলটি সনাক্ত করার চেষ্টা করে, যা, যদি নির্দিষ্ট না করা থাকে, তাহলে ডিফল্টভাবেus-central1ব্যবহার করে। যদি ফাংশনের সোর্স কোড অনুপলব্ধ থাকে, তাহলে CLI ডিপ্লয়েড ফাংশন থেকে অঞ্চলটি সনাক্ত করার চেষ্টা করে। যদি ফাংশনটি একাধিক অঞ্চলে থাকে, তাহলে CLI-এর জন্যhosting.rewritesকনফিগারেশনেregionনির্দিষ্ট করা প্রয়োজন।
pinTagবৈশিষ্ট্যটি শুধুমাত্র Cloud Functions for Firebase উপলব্ধ। এই বৈশিষ্ট্যটির সাহায্যে, আপনি নিশ্চিত করতে পারেন যে আপনার সাইটের গতিশীল সামগ্রী তৈরির জন্য প্রতিটি ফাংশন আপনার স্ট্যাটিক Hosting রিসোর্স এবং Hosting কনফিগারেশনের সাথে সিঙ্ক করা আছে। এছাড়াও, এই বৈশিষ্ট্যটি আপনাকে Hosting প্রিভিউ চ্যানেলগুলিতে ফাংশনগুলিতে আপনার পুনর্লিখনের পূর্বরূপ দেখতে দেয়।যদি আপনি
hosting.rewritesকনফিগারেশনের একটিfunctionব্লকে"pinTag": trueযোগ করেন, তাহলে "pinned" ফাংশনটি আপনার স্ট্যাটিক Hosting রিসোর্স এবং কনফিগারেশনের সাথে স্থাপন করা হবে, এমনকিচালানোর সময়ও। যদি আপনি আপনার সাইটের একটি সংস্করণ রোল ব্যাক করেন, তাহলে "pinned" ফাংশনটিও রোল ব্যাক করা হবে।firebase deploy --only hosting এই বৈশিষ্ট্যটি Cloud Run ট্যাগের উপর নির্ভর করে, যার প্রতিটি পরিষেবার জন্য 1000টি ট্যাগ এবং প্রতিটি অঞ্চলের জন্য 2000টি ট্যাগের সীমা রয়েছে। এর অর্থ হল শত শত স্থাপনার পরে, কোনও সাইটের প্রাচীনতম সংস্করণগুলি কাজ করা বন্ধ করে দিতে পারে।
এই পুনর্লিখনের নিয়মটি যোগ করার পরে এবং 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 এবং OPTIONS । REPORT বা 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)
}
} ]
}
এই বৈশিষ্ট্যটির সাহায্যে, আপনি নিশ্চিত করতে পারবেন যে আপনার সাইটের গতিশীল সামগ্রী তৈরির জন্য আপনার Cloud Run পরিষেবার সংশোধন আপনার স্ট্যাটিক Hosting রিসোর্স এবং Hosting কনফিগারেশনের সাথে সুসংগত রয়েছে। এছাড়াও, এই বৈশিষ্ট্যটি আপনাকে Hosting প্রিভিউ চ্যানেলগুলিতে Cloud Run আপনার পুনর্লিখনের পূর্বরূপ দেখতে দেয়।
যদি আপনি
hosting.rewritesকনফিগারেশনের একটিrunব্লকে"pinTag": trueযোগ করেন, তাহলে আপনার স্ট্যাটিক Hosting রিসোর্স এবং কনফিগারেশন স্থাপনের সময় Cloud Run পরিষেবার সাম্প্রতিকতম সংস্করণে পিন করা হবে। যদি আপনি আপনার সাইটের একটি সংস্করণ রোল ব্যাক করেন, তাহলে "পিন করা" Cloud Run পরিষেবার সংস্করণও রোল ব্যাক করা হবে।এই বৈশিষ্ট্যটি Cloud Run ট্যাগের উপর নির্ভর করে, যার প্রতিটি পরিষেবার জন্য 1000টি ট্যাগ এবং প্রতিটি অঞ্চলের জন্য 2000টি ট্যাগের সীমা রয়েছে। এর অর্থ হল শত শত স্থাপনার পরে, কোনও সাইটের প্রাচীনতম সংস্করণগুলি কাজ করা বন্ধ করে দিতে পারে।
এই পুনর্লিখনের নিয়মটি যোগ করার পরে এবং 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 এবং OPTIONS । REPORT বা 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 তৈরি করুন
কাস্টম ডোমেইন 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 |
| |
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": "*"
} ]
} ]
}
"hosting": { // ... // Add the "headers" attribute within "hosting" "headers": [ { // Applies a CORS header for all font files "source": "**/*.@(eot|otf|ttf|ttc|woff|font.css)", "headers": [ { "key": "Access-Control-Allow-Origin", "value": "*" } ] }, { // Overrides the default 1 hour browser cache with a 2 hour cache for all image files "source": "**/*.@(jpg|jpeg|gif|png)", "headers": [ { "key": "Cache-Control", "value": "max-age=7200" } ] }, { // A regular expression-based rewrite equivalent to the above behavior "regex": ".+/\w+\.(jpg|jpeg|gif|png)$", "headers": [ { "key": "Cache-Control", "value": "max-age=7200" } ] }, { // Sets the cache header for 404 pages to cache for 5 minutes "source": "404.html", "headers": [ { "key": "Cache-Control", "value": "max-age=300" } ] } ] }
headers অ্যাট্রিবিউটে সংজ্ঞার একটি অ্যারে থাকে, যেখানে প্রতিটি সংজ্ঞায় নীচের টেবিলের ক্ষেত্রগুলি অন্তর্ভুক্ত করতে হবে।
| মাঠ | বিবরণ | ||
|---|---|---|---|
headers | |||
source (প্রস্তাবিত)অথবা regex | একটি URL প্যাটার্ন যা প্রাথমিক অনুরোধ URL এর সাথে মিলে গেলে, Hosting কাস্টম হেডার প্রয়োগ করতে ট্রিগার করে
আপনার কাস্টম 404 পৃষ্ঠার সাথে মেলে এমন একটি হেডার তৈরি করতে, আপনার | ||
(উপ-) headers অ্যারে | অনুরোধের পথে Hosting যে কাস্টম হেডারগুলি প্রয়োগ করে প্রতিটি সাব-হেডারে অবশ্যই একটি | ||
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",
}
}