Firebase হোস্টিং এর সাথে, আপনি আপনার সাইটের অনুরোধের জন্য কাস্টমাইজড হোস্টিং আচরণ কনফিগার করতে পারেন।
হোস্টিং এর জন্য আপনি কি কনফিগার করতে পারেন?
ফায়ারবেস হোস্টিং-এ আপনি আপনার স্থানীয় প্রকল্প ডিরেক্টরিতে কোন ফাইল স্থাপন করতে চান তা নির্দিষ্ট করুন। কিভাবে শিখব.
একটি কাস্টমাইজড 404/নট ফাউন্ড পেজ পরিবেশন করুন। কিভাবে শিখব.
আপনি সরানো বা মুছে ফেলা পৃষ্ঠাগুলির জন্য
redirects
সেট আপ করুন৷ কিভাবে শিখব.এই উদ্দেশ্যগুলির যেকোনো একটির জন্য
rewrites
সেট আপ করুন:একাধিক URL-এর জন্য একই বিষয়বস্তু দেখান। কিভাবে শিখব.
একটি ফাংশন পরিবেশন করুন বা একটি হোস্টিং URL থেকে একটি ক্লাউড রান কন্টেইনার অ্যাক্সেস করুন৷ কিভাবে শিখুন: ফাংশন বা ধারক ।
একটি কাস্টম ডোমেইন ডায়নামিক লিঙ্ক তৈরি করুন। কিভাবে শিখব.
একটি অনুরোধ বা প্রতিক্রিয়া সম্পর্কে অতিরিক্ত তথ্য পাঠাতে
headers
যোগ করুন, যেমন ব্রাউজারগুলি কীভাবে পৃষ্ঠা এবং এর বিষয়বস্তু (প্রমাণিকরণ, ক্যাশিং, এনকোডিং, ইত্যাদি) পরিচালনা করা উচিত। কিভাবে শিখব.ব্যবহারকারীর ভাষা পছন্দ এবং/অথবা দেশের উপর ভিত্তি করে নির্দিষ্ট বিষয়বস্তু পরিবেশন করতে আন্তর্জাতিকীকরণ (i18n) পুনর্লিখন সেট আপ করুন। জানুন কিভাবে (ভিন্ন পৃষ্ঠা)।
আপনি কোথায় আপনার হোস্টিং কনফিগারেশন সংজ্ঞায়িত করবেন?
আপনি আপনার firebase.json
ফাইলে আপনার Firebase হোস্টিং কনফিগারেশন সংজ্ঞায়িত করুন৷ আপনি যখন firebase init
কমান্ড চালান তখন Firebase স্বয়ংক্রিয়ভাবে আপনার প্রজেক্ট ডিরেক্টরির রুটে আপনার firebase.json
ফাইল তৈরি করে।
আপনি এই পৃষ্ঠার নীচে একটি সম্পূর্ণ firebase.json
কনফিগারেশন উদাহরণ (শুধু Firebase হোস্টিং কভার করে) খুঁজে পেতে পারেন। মনে রাখবেন যে একটি firebase.json
ফাইলে অন্যান্য Firebase পরিষেবার কনফিগারেশনও থাকতে পারে।
আপনি হোস্টিং REST API ব্যবহার করে নিয়োজিত firebase.json
সামগ্রী পরীক্ষা করতে পারেন।
হোস্টিং প্রতিক্রিয়া অগ্রাধিকার ক্রম
এই পৃষ্ঠায় বর্ণিত বিভিন্ন ফায়ারবেস হোস্টিং কনফিগারেশন বিকল্পগুলি কখনও কখনও ওভারল্যাপ করতে পারে। যদি কোন দ্বন্দ্ব থাকে, হোস্টিং নিম্নলিখিত অগ্রাধিকার ক্রম ব্যবহার করে তার প্রতিক্রিয়া নির্ধারণ করে:
- সংরক্ষিত নামস্থান যা একটি
/__/*
পাথ সেগমেন্ট দিয়ে শুরু হয় - কনফিগার করা পুনঃনির্দেশ
- অবিকল স্থির সামগ্রী
- কনফিগার করা পুনর্লিখন
- কাস্টম 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/**"
]
}
সর্বজনীন
প্রয়োজন
ফায়ারবেস হোস্টিং-এ কোন ডিরেক্টরি স্থাপন করতে হবে তা 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
সামগ্রী যুক্ত করুন৷
ফায়ারবেস হোস্টিং এই কাস্টম 404.html
পৃষ্ঠার বিষয়বস্তু প্রদর্শন করবে যদি কোনো ব্রাউজার আপনার ডোমেন বা সাবডোমেনে একটি 404 Not Found
ত্রুটি ট্রিগার করে।
পুনঃনির্দেশ কনফিগার করুন
ঐচ্ছিক
আপনি একটি পৃষ্ঠা সরানো হলে বা URL ছোট করতে ভাঙা লিঙ্ক প্রতিরোধ করতে একটি URL পুনঃনির্দেশ ব্যবহার করুন৷ উদাহরণস্বরূপ, আপনি example.com/team
থেকে example.com/about.html
এ একটি ব্রাউজার পুনঃনির্দেশ করতে পারেন।
একটি redirects
অ্যাট্রিবিউট তৈরি করে URL পুনঃনির্দেশ নির্দিষ্ট করুন যাতে বস্তুর একটি অ্যারে থাকে (যাকে "পুনঃনির্দেশ নিয়ম" বলা হয়)। প্রতিটি নিয়মে, একটি URL প্যাটার্ন নির্দিষ্ট করুন যা অনুরোধ URL পাথের সাথে মিলে গেলে, নির্দিষ্ট গন্তব্য URL-এ একটি পুনঃনির্দেশের সাথে প্রতিক্রিয়া জানাতে হোস্টিংকে ট্রিগার করে৷
এখানে একটি 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
অ্যাট্রিবিউটে পুনঃনির্দেশিত নিয়মগুলির একটি অ্যারে রয়েছে, যেখানে প্রতিটি নিয়মে অবশ্যই নীচের টেবিলের ক্ষেত্রগুলি অন্তর্ভুক্ত করতে হবে।
ফায়ারবেস হোস্টিং প্রতিটি অনুরোধের শুরুতে সমস্ত URL পাথের সাথে source
বা regex
মান তুলনা করে (ব্রাউজার সেই পাথে একটি ফাইল বা ফোল্ডার আছে কিনা তা নির্ধারণ করার আগে)। যদি একটি মিল পাওয়া যায়, তাহলে Firebase হোস্টিং অরিজিন সার্ভার একটি HTTPS পুনঃনির্দেশ প্রতিক্রিয়া পাঠায় যাতে ব্রাউজারকে destination
URL এ একটি নতুন অনুরোধ করতে বলে।
মাঠ | বর্ণনা | |
---|---|---|
redirects | ||
source (প্রস্তাবিত)বা regex | একটি URL প্যাটার্ন যা, যদি প্রাথমিক অনুরোধের URL এর সাথে মিলে যায়, হোস্টিংকে পুনঃনির্দেশ প্রয়োগ করতে ট্রিগার করে
| |
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 পাথের সাথে মিলে গেলে, হোস্টিংকে প্রতিক্রিয়া জানাতে ট্রিগার করে যেন পরিষেবাটিকে নির্দিষ্ট গন্তব্য 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 হোস্টিং শুধুমাত্র একটি পুনঃলিখন নিয়ম প্রয়োগ করে যদি নির্দিষ্ট source
বা regex
URL প্যাটার্নের সাথে মেলে এমন URL পাথে কোনো ফাইল বা ডিরেক্টরি বিদ্যমান না থাকে। যখন একটি অনুরোধ একটি পুনর্লিখন নিয়ম ট্রিগার করে, ব্রাউজার একটি HTTP পুনঃনির্দেশের পরিবর্তে নির্দিষ্ট destination
ফাইলের প্রকৃত বিষয়বস্তু ফেরত দেয়।
মাঠ | বর্ণনা | |
---|---|---|
rewrites | ||
source (প্রস্তাবিত)বা regex | একটি URL প্যাটার্ন যা, যদি প্রাথমিক অনুরোধের URL-এর সাথে মিলে যায়, হোস্টিংকে পুনঃলিখন প্রয়োগ করতে ট্রিগার করে
| |
destination | একটি স্থানীয় ফাইল যা অবশ্যই বিদ্যমান এই URL একটি আপেক্ষিক বা একটি পরম পথ হতে পারে. |
একটি ফাংশন সরাসরি অনুরোধ
আপনি একটি ফায়ারবেস হোস্টিং URL থেকে একটি ফাংশন পরিবেশন করতে rewrites
ব্যবহার করতে পারেন। নিম্নলিখিত উদাহরণটি ক্লাউড ফাংশন ব্যবহার করে গতিশীল সামগ্রী পরিবেশন করার একটি উদ্ধৃতি।
উদাহরণস্বরূপ, 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
বৈশিষ্ট্যটি শুধুমাত্র Firebase (2nd gen) এর জন্য ক্লাউড ফাংশনে উপলব্ধ। এই বৈশিষ্ট্যটির সাহায্যে, আপনি নিশ্চিত করতে পারেন যে আপনার সাইটের গতিশীল সামগ্রী তৈরি করার জন্য প্রতিটি ফাংশন আপনার স্ট্যাটিক হোস্টিং সংস্থান এবং হোস্টিং কনফিগারেশনের সাথে সিঙ্কে রাখা হয়েছে। এছাড়াও, এই বৈশিষ্ট্যটি আপনাকে হোস্টিং প্রিভিউ চ্যানেলগুলিতে ফাংশনে আপনার পুনর্লিখনের পূর্বরূপ দেখতে দেয়।যদি আপনি
"pinTag": true
hosting.rewrites
কনফিগারেশনের একটিfunction
ব্লকে সত্য, তাহলে "পিন করা" ফাংশনটি আপনার স্ট্যাটিক হোস্টিং সংস্থান এবং কনফিগারেশনের সাথে স্থাপন করা হবে, এমনকি যখনচালানো হয়। আপনি যদি আপনার সাইটের একটি সংস্করণ রোল ব্যাক করেন, "পিন করা" ফাংশনটিও রোল ব্যাক করা হয়৷
firebase deploy --only hosting এই বৈশিষ্ট্যটি ক্লাউড রান ট্যাগের উপর নির্ভর করে, যার সীমা প্রতি পরিষেবা প্রতি 1000 ট্যাগ এবং প্রতি অঞ্চলে 2000 ট্যাগ রয়েছে৷ এর মানে হল শত শত স্থাপনের পরে, একটি সাইটের প্রাচীনতম সংস্করণগুলি কাজ করা বন্ধ করে দিতে পারে।
এই পুনর্লিখনের নিয়মটি যোগ করার পরে এবং Firebase এ স্থাপন করার পরে ( firebase deploy
ব্যবহার করে), আপনার ফাংশনটি নিম্নলিখিত URLগুলির মাধ্যমে পৌঁছানো যায়:
আপনার ফায়ারবেস সাবডোমেন:
PROJECT_ID .web.app/bigben
এবংPROJECT_ID .firebaseapp.com/bigben
যেকোনো সংযুক্ত কাস্টম ডোমেন :
CUSTOM_DOMAIN /bigben
হোস্টিং এর সাথে ফাংশনগুলিতে অনুরোধগুলিকে পুনঃনির্দেশ করার সময়, সমর্থিত HTTP অনুরোধের পদ্ধতিগুলি হল GET
, POST
, HEAD
, PUT
, DELETE
, PATCH
, এবং OPTIONS
৷ অন্যান্য পদ্ধতি যেমন REPORT
বা PROFIND
সমর্থিত নয়।
একটি ক্লাউড রান কন্টেইনারে সরাসরি অনুরোধ
আপনি একটি Firebase হোস্টিং URL থেকে একটি ক্লাউড রান কন্টেইনার অ্যাক্সেস করতে rewrites
ব্যবহার করতে পারেন। নিম্নলিখিত উদাহরণটি ক্লাউড রান ব্যবহার করে গতিশীল সামগ্রী পরিবেশন করার একটি উদ্ধৃতি।
উদাহরণস্বরূপ, 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)
}
} ]
}
এই বৈশিষ্ট্যটির সাহায্যে, আপনি নিশ্চিত করতে পারেন যে আপনার সাইটের গতিশীল সামগ্রী তৈরি করার জন্য আপনার ক্লাউড রান পরিষেবার সংশোধন আপনার স্ট্যাটিক হোস্টিং সংস্থান এবং হোস্টিং কনফিগারেশনের সাথে সিঙ্কে রাখা হয়েছে৷ এছাড়াও, এই বৈশিষ্ট্যটি আপনাকে হোস্টিং প্রিভিউ চ্যানেলে ক্লাউড রানে আপনার পুনর্লিখনের পূর্বরূপ দেখতে দেয়।
আপনি যদি
"pingTag": true
hosting.rewrites
কনফিগারেশনের একটিrun
ব্লকে সত্য, আপনার স্ট্যাটিক হোস্টিং সংস্থান এবং কনফিগারেশন ক্লাউড রান পরিষেবার সবচেয়ে সাম্প্রতিক সংশোধনে, স্থাপনের সময় পিন করা হবে। আপনি যদি আপনার সাইটের একটি সংস্করণ রোল ব্যাক করেন, তাহলে "পিন করা" ক্লাউড রান পরিষেবার সংশোধনও ফিরিয়ে আনা হবে৷এই বৈশিষ্ট্যটি ক্লাউড রান ট্যাগের উপর নির্ভর করে, যার সীমা প্রতি পরিষেবা প্রতি 1000 ট্যাগ এবং প্রতি অঞ্চলে 2000 ট্যাগ রয়েছে৷ এর মানে হল শত শত স্থাপনের পরে, একটি সাইটের প্রাচীনতম সংস্করণগুলি কাজ করা বন্ধ করে দিতে পারে।
এই পুনর্লিখনের নিয়মটি যোগ করার পরে এবং Firebase এ স্থাপন করার পরে ( firebase deploy
ব্যবহার করে), আপনার কন্টেইনার চিত্রটি নিম্নলিখিত URLগুলির মাধ্যমে পৌঁছানো যায়:
আপনার ফায়ারবেস সাবডোমেন:
PROJECT_ID .web.app/helloworld
এবংPROJECT_ID .firebaseapp.com/helloworld
যেকোনো সংযুক্ত কাস্টম ডোমেন :
CUSTOM_DOMAIN /helloworld
হোস্টিং সহ ক্লাউড রান কন্টেনারগুলিতে অনুরোধগুলি পুনঃনির্দেশ করার সময়, সমর্থিত HTTP অনুরোধের পদ্ধতিগুলি হল GET
, POST
, HEAD
, PUT
, DELETE
, PATCH
, এবং OPTIONS
৷ অন্যান্য পদ্ধতি যেমন REPORT
বা PROFIND
সমর্থিত নয়।
সেরা পারফরম্যান্সের জন্য, নিম্নলিখিত অঞ্চলগুলি ব্যবহার করে হোস্টিংয়ের সাথে আপনার ক্লাউড রান পরিষেবাটি সংযোজন করুন:
-
us-west1
-
us-central1
-
us-east1
-
europe-west1
-
asia-east1
হোস্টিং থেকে ক্লাউড রানে পুনর্লিখন নিম্নলিখিত অঞ্চলে সমর্থিত:
-
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
কাস্টম ডোমেইন ডায়নামিক লিঙ্ক তৈরি করুন
আপনি কাস্টম ডোমেন ডায়নামিক লিঙ্ক তৈরি করতে 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 |
| |
rewrites | ||
source | একটি পথ যা আপনি ডায়নামিক লিঙ্কের জন্য ব্যবহার করতে চান ইউআরএল-এর পাথ পুনর্লিখনের নিয়মগুলির বিপরীতে, ডায়নামিক লিঙ্কগুলির জন্য পুনর্লিখনের নিয়মে রেগুলার এক্সপ্রেশন থাকতে পারে না। | |
dynamicLinks | true সেট করা আবশ্যক |
হেডার কনফিগার করুন
ঐচ্ছিক
শিরোনামগুলি ক্লায়েন্ট এবং সার্ভারকে একটি অনুরোধ বা প্রতিক্রিয়া সহ অতিরিক্ত তথ্য পাস করার অনুমতি দেয়। কিছু শিরোনাম সেট প্রভাবিত করতে পারে কিভাবে ব্রাউজার পৃষ্ঠা এবং এর বিষয়বস্তু পরিচালনা করে, অ্যাক্সেস নিয়ন্ত্রণ, প্রমাণীকরণ, ক্যাশিং এবং এনকোডিং সহ।
একটি headers
অ্যাট্রিবিউট তৈরি করে কাস্টম, ফাইল-নির্দিষ্ট প্রতিক্রিয়া শিরোনাম নির্দিষ্ট করুন যাতে হেডার অবজেক্টের একটি অ্যারে রয়েছে। প্রতিটি বস্তুতে, একটি URL প্যাটার্ন নির্দিষ্ট করুন যা অনুরোধ 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": "*"
} ]
} ]
}
"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-এর সাথে মিলে যায়, কাস্টম শিরোনাম প্রয়োগ করতে হোস্টিংকে ট্রিগার করে৷
আপনার কাস্টম 404 পৃষ্ঠার সাথে মেলে একটি শিরোনাম তৈরি করতে, আপনার | ||
(সাব-) headers অ্যারে | কাস্টম শিরোনাম যে হোস্টিং অনুরোধ পাথ প্রযোজ্য প্রতিটি উপ-শিরোনাম অবশ্যই একটি | ||
key | হেডারের নাম, উদাহরণস্বরূপ Cache-Control | ||
value | হেডারের মান, উদাহরণস্বরূপ max-age=7200 |
আপনি হোস্টিং বিভাগে Cache-Control
সম্পর্কে আরও জানতে পারেন যা গতিশীল সামগ্রী পরিবেশন এবং মাইক্রোসার্ভিসেস হোস্ট করার বর্ণনা দেয়। আপনি CORS শিরোনাম সম্পর্কে আরও জানতে পারেন।
.html
এক্সটেনশন নিয়ন্ত্রণ করুন
ঐচ্ছিক
cleanUrls
অ্যাট্রিবিউট আপনাকে URL-এ .html
এক্সটেনশন অন্তর্ভুক্ত করা উচিত কিনা তা নিয়ন্ত্রণ করতে দেয়।
true
হলে, হোস্টিং আপলোড করা ফাইল URL থেকে স্বয়ংক্রিয়ভাবে .html
এক্সটেনশন ড্রপ করে। যদি অনুরোধে একটি .html
এক্সটেনশন যোগ করা হয়, হোস্টিং একই পথে একটি 301
পুনঃনির্দেশ করে কিন্তু .html
এক্সটেনশনটি সরিয়ে দেয়।
একটি cleanUrls
অ্যাট্রিবিউট অন্তর্ভুক্ত করে URL-এ .html
এর অন্তর্ভুক্তি কীভাবে নিয়ন্ত্রণ করা যায় তা এখানে রয়েছে:
"hosting": {
// ...
// Drops `.html` from uploaded URLs
"cleanUrls": true
}
ট্রেলিং স্ল্যাশ নিয়ন্ত্রণ করুন
ঐচ্ছিক
trailingSlash
অ্যাট্রিবিউট আপনাকে স্ট্যাটিক কন্টেন্ট ইউআরএলে ট্রেলিং স্ল্যাশ অন্তর্ভুক্ত করা উচিত কিনা তা নিয়ন্ত্রণ করতে দেয়।
-
true
হলে, হোস্টিং একটি ট্রেলিং স্ল্যাশ যোগ করতে URLগুলিকে পুনঃনির্দেশ করে। -
false
হলে, হোস্টিং একটি ট্রেলিং স্ল্যাশ সরাতে URLগুলিকে পুনঃনির্দেশ করে৷ - অনির্দিষ্ট হলে, হোস্টিং শুধুমাত্র ডিরেক্টরি সূচী ফাইলের জন্য ট্রেলিং স্ল্যাশ ব্যবহার করে (উদাহরণস্বরূপ,
about/index.html
)।
trailingSlash
অ্যাট্রিবিউট যোগ করে ট্রেইলিং স্ল্যাশগুলি কীভাবে নিয়ন্ত্রণ করা যায় তা এখানে রয়েছে:
"hosting": {
// ...
// Removes trailing slashes from URLs
"trailingSlash": false
}
trailingSlash
অ্যাট্রিবিউট ক্লাউড ফাংশন বা ক্লাউড রান দ্বারা পরিবেশিত গতিশীল সামগ্রীতে পুনর্লিখনকে প্রভাবিত করে না।
গ্লোব প্যাটার্ন ম্যাচিং
ফায়ারবেস হোস্টিং কনফিগারেশন বিকল্পগুলি এক্সটগ্লোবের সাথে গ্লোব প্যাটার্ন ম্যাচিং স্বরলিপির ব্যাপক ব্যবহার করে, যেভাবে গিট gitignore
নিয়মগুলি পরিচালনা করে এবং বোওয়ার নিয়মগুলি ignore
করে। এই উইকি পৃষ্ঠাটি একটি আরও বিশদ রেফারেন্স, তবে নিম্নলিখিতগুলি এই পৃষ্ঠায় ব্যবহৃত উদাহরণগুলির ব্যাখ্যা রয়েছে:
firebase.json
— শুধুমাত্রpublic
ডিরেক্টরির রুটেfirebase.json
ফাইলের সাথে মেলে**
— একটি নির্বিচারে সাব-ডিরেক্টরিতে যেকোনো ফাইল বা ফোল্ডারের সাথে মেলে*
— শুধুমাত্রpublic
ডিরেক্টরির রুটে থাকা ফাইল এবং ফোল্ডারের সাথে মেলে**/.*
— দিয়ে শুরু হওয়া যেকোনো ফাইলের সাথে মিলে যায়.
(সাধারণত লুকানো ফাইল, যেমন.git
ফোল্ডারে) একটি নির্বিচারে সাব-ডিরেক্টরিতে**/node_modules/**
— একটিnode_modules
ফোল্ডারের একটি নির্বিচারে সাব-ডিরেক্টরীতে যেকোন ফাইল বা ফোল্ডারের সাথে মেলে, যেটি নিজেইpublic
ডিরেক্টরির একটি ইচ্ছামত সাব-ডিরেক্টরিতে হতে পারে**/*.@(jpg|jpeg|gif|png)
— একটি নির্বিচারে সাব-ডিরেক্টরিতে যেকোন ফাইলের সাথে মেলে যা নিচের একটির সাথে শেষ হয়:.jpg
,.jpeg
,.gif
, বা.png
সম্পূর্ণ হোস্টিং কনফিগারেশন উদাহরণ
Firebase হোস্টিংয়ের জন্য নিচের একটি সম্পূর্ণ 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",
}
}