Firebase Hosting সাথে, আপনি আপনার সাইটে অনুরোধের জন্য কাস্টমাইজড হোস্টিং আচরণ কনফিগার করতে পারেন।
Hosting জন্য আপনি কি কনফিগার করতে পারেন?
আপনার স্থানীয় প্রকল্প ডিরেক্টরির কোন ফাইলগুলিকে আপনি Firebase Hosting এ স্থাপন করতে চান তা নির্দিষ্ট করুন৷ কিভাবে শিখুন.
একটি কাস্টমাইজড 404/নট ফাউন্ড পেজ পরিবেশন করুন। কিভাবে শিখুন.
আপনি সরানো বা মুছে ফেলা পৃষ্ঠাগুলির জন্য
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 পৃষ্ঠা
- ডিফল্ট 404 পৃষ্ঠা
আপনি যদি i18n পুনর্লিখন ব্যবহার করে থাকেন, তাহলে আপনার "i18n বিষয়বস্তু" সামঞ্জস্য করার জন্য সঠিক-ম্যাচ এবং 404 হ্যান্ডলিং অগ্রাধিকার ক্রম পরিসরে প্রসারিত করা হয়।
কোন ফাইল স্থাপন করতে হবে তা নির্দিষ্ট করুন
ডিফল্ট বৈশিষ্ট্যগুলি — public
এবং ignore
— ডিফল্ট firebase.json
ফাইলে অন্তর্ভুক্ত আপনার প্রকল্প ডিরেক্টরির কোন ফাইলগুলি আপনার Firebase প্রকল্পে স্থাপন করা উচিত তা নির্ধারণ করে৷
একটি firebase.json
ফাইলের ডিফল্ট hosting
কনফিগারেশন এইরকম দেখায়:
"hosting": {
"public": "public", // the only required attribute for Hosting
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
]
}
পাবলিক
প্রয়োজন
Firebase Hosting এ কোন ডিরেক্টরি স্থাপন করতে হবে তা public
বৈশিষ্ট্য নির্দিষ্ট করে। ডিফল্ট মান হল 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 Hosting এই কাস্টম 404.html
পৃষ্ঠার বিষয়বস্তু প্রদর্শন করবে যদি কোনো ব্রাউজার আপনার ডোমেন বা সাবডোমেনে একটি 404 Not Found
ত্রুটি ট্রিগার করে।
পুনঃনির্দেশ কনফিগার করুন
ঐচ্ছিক
আপনি একটি পৃষ্ঠা সরানো হলে বা URL ছোট করতে ভাঙা লিঙ্ক প্রতিরোধ করতে একটি URL পুনঃনির্দেশ ব্যবহার করুন৷ উদাহরণস্বরূপ, আপনি example.com/team
থেকে example.com/about.html
এ একটি ব্রাউজার পুনঃনির্দেশ করতে পারেন।
একটি redirects
অ্যাট্রিবিউট তৈরি করে URL পুনঃনির্দেশ নির্দিষ্ট করুন যাতে বস্তুর একটি অ্যারে থাকে (যাকে "পুনঃনির্দেশ নিয়ম" বলা হয়)। প্রতিটি নিয়মে, একটি URL প্যাটার্ন নির্দিষ্ট করুন যা অনুরোধ URL পাথের সাথে মিলে গেলে, নির্দিষ্ট গন্তব্য URL-এ একটি পুনঃনির্দেশের সাথে প্রতিক্রিয়া জানাতে Hosting ট্রিগার করে৷
এখানে একটি redirects
অ্যাট্রিবিউটের মৌলিক কাঠামো রয়েছে। এই উদাহরণটি /foo
তে অনুরোধগুলিকে /bar
এ একটি নতুন অনুরোধ করে পুনর্নির্দেশ করে।
"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
অ্যাট্রিবিউটে পুনঃনির্দেশিত নিয়মগুলির একটি অ্যারে রয়েছে, যেখানে প্রতিটি নিয়মে অবশ্যই নীচের টেবিলের ক্ষেত্রগুলি অন্তর্ভুক্ত করতে হবে।
Firebase Hosting প্রতিটি অনুরোধের শুরুতে সমস্ত URL পাথের সাথে 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 ব্যবহার করে গতিশীল সামগ্রী পরিবেশন করার একটি উদ্ধৃতি।
উদাহরণস্বরূপ, bigben
ফাংশনটি চালানোর জন্য আপনার Hosting সাইটে পৃষ্ঠা /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 প্রিভিউ চ্যানেলগুলিতে ফাংশনে আপনার পুনর্লিখনের পূর্বরূপ দেখতে দেয়।যদি আপনি "pinTag" যোগ করেন:
hosting.rewrites
কনফিগারেশনের একটিfunction
ব্লকে"pinTag": true
, তাহলে "পিন করা" ফাংশনটি আপনার স্ট্যাটিক Hosting সংস্থান এবং কনফিগারেশনের সাথে স্থাপন করা হবে, এমনকি যখনচালানো হয়। আপনি যদি আপনার সাইটের একটি সংস্করণ রোল ব্যাক করেন, "পিন করা" ফাংশনটিও রোল ব্যাক করা হয়৷
firebase deploy --only hosting এই বৈশিষ্ট্যটি Cloud Run ট্যাগের উপর নির্ভর করে, যার সীমা প্রতি পরিষেবা প্রতি 1000 ট্যাগ এবং প্রতি অঞ্চলে 2000 ট্যাগ রয়েছে৷ এর মানে হল শত শত স্থাপনের পরে, একটি সাইটের প্রাচীনতম সংস্করণগুলি কাজ করা বন্ধ করে দিতে পারে।
এই পুনর্লিখনের নিয়মটি যোগ করার পরে এবং Firebase এ স্থাপন করার পরে ( firebase deploy
ব্যবহার করে), আপনার ফাংশনটি নিম্নলিখিত URLগুলির মাধ্যমে পৌঁছানো যায়:
আপনার ফায়ারবেস সাবডোমেন:
PROJECT_ID .web.app/bigben
এবংPROJECT_ID .firebaseapp.com/bigben
যেকোনো সংযুক্ত কাস্টম ডোমেন :
CUSTOM_DOMAIN /bigben
Hosting এর সাথে ফাংশনগুলিতে অনুরোধগুলি পুনঃনির্দেশ করার সময়, সমর্থিত HTTP অনুরোধের পদ্ধতিগুলি হল GET
, POST
, HEAD
, PUT
, DELETE
, PATCH
, এবং OPTIONS
৷ অন্যান্য পদ্ধতি যেমন REPORT
বা PROFIND
সমর্থিত নয়।
একটি Cloud Run কন্টেইনারে সরাসরি অনুরোধ
আপনি একটি Firebase Hosting URL থেকে একটি Cloud Run কন্টেইনার অ্যাক্সেস করতে rewrites
ব্যবহার করতে পারেন। নিম্নলিখিত উদাহরণটি Cloud Run ব্যবহার করে গতিশীল সামগ্রী পরিবেশন করার একটি উদ্ধৃতি।
উদাহরণস্বরূপ, helloworld
কন্টেইনার ইনস্ট্যান্সের স্টার্টআপ এবং চলমান ট্রিগার করার জন্য আপনার Hosting সাইটে /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 আপনার পুনর্লিখনের পূর্বরূপ দেখতে দেয়।
আপনি যদি "pinTag" যোগ করেন:
hosting.rewrites
কনফিগারেশনের একটিrun
ব্লকে"pinTag": true
, আপনার স্ট্যাটিক Hosting সংস্থান এবং কনফিগারেশন Cloud Run পরিষেবার সবচেয়ে সাম্প্রতিক সংশোধনে পিন করা হবে, স্থাপনের সময়। আপনি যদি আপনার সাইটের একটি সংস্করণ রোল ব্যাক করেন, তাহলে "পিন করা" Cloud Run পরিষেবার সংশোধনও ফিরিয়ে আনা হবে৷এই বৈশিষ্ট্যটি Cloud Run ট্যাগের উপর নির্ভর করে, যার সীমা প্রতি পরিষেবা প্রতি 1000 ট্যাগ এবং প্রতি অঞ্চলে 2000 ট্যাগ রয়েছে৷ এর মানে হল শত শত স্থাপনের পরে, একটি সাইটের প্রাচীনতম সংস্করণগুলি কাজ করা বন্ধ করে দিতে পারে।
এই পুনর্লিখনের নিয়মটি যোগ করার পরে এবং Firebase এ স্থাপন করার পরে ( firebase deploy
ব্যবহার করে), আপনার কন্টেইনার চিত্রটি নিম্নলিখিত URLগুলির মাধ্যমে পৌঁছানো যায়:
আপনার ফায়ারবেস সাবডোমেন:
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
সমর্থিত নয়।
সেরা পারফরম্যান্সের জন্য, নিম্নলিখিত অঞ্চলগুলি ব্যবহার করে Hosting সাথে আপনার Cloud Run পরিষেবাটি সংযোজন করুন:
-
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 জন্য ব্যবহার করতে চান ইউআরএল-এর পাথ পুনর্লিখনের নিয়মগুলির বিপরীতে, 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
অ্যাট্রিবিউট আপনাকে স্ট্যাটিক কন্টেন্ট ইউআরএলে ট্রেলিং স্ল্যাশ অন্তর্ভুক্ত করা উচিত কিনা তা নিয়ন্ত্রণ করতে দেয়।
-
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 কনফিগারেশন বিকল্পগুলি এক্সটগ্লোবের সাথে গ্লোব প্যাটার্ন ম্যাচিং স্বরলিপির ব্যাপক ব্যবহার করে, যেভাবে গিট gitignore
নিয়মগুলি পরিচালনা করে এবং বোওয়ার নিয়মগুলি 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",
}
}