আমি এই মুহুর্তে কিছু ত্রুটি পৃষ্ঠাগুলি এবং অন্যান্য "ডিফল্ট" মিডিয়া ফাইলগুলি (যেমন ফেভিকন.ইকো এবং রোবটস. টেক্সট) এনজিঞ্জের হ্যান্ডলিংটি কনফিগার করছি এবং নির্দিষ্ট ত্রুটি পৃষ্ঠাগুলির জন্য যেভাবে চাই তার জিনিসগুলি কাজ করতে আমি একটি ছোট সমস্যা হয়ে পড়েছি ran ।
মূলত, আমি যা করার চেষ্টা করছি তা হ'ল সেই সার্ভারের মূলের নীচে একটি সার্ভারের জন্য নির্দিষ্ট ফাইলগুলি পরিবেশন করা, যেমন /var/www/someserver.com/robots.txt। যদি সেই ফাইলটি বিদ্যমান না থাকে তবে আমি nginx "ডিফল্ট", অর্থাৎ /var/www/default/robots.txt এ যেতে চাই। এটি কীভাবে আমার (সফলভাবে) কনফিগার করা হয়েছে তার মূল কথাটি:
server {
...
root /var/www/someserver.com;
location ~* ^/(robots\.txt)$ {
error_page 404 = @default;
}
location @default {
root /var/www/default;
}
}
এটি দুর্দান্ত কাজ করে।
আমি ত্রুটি পৃষ্ঠাগুলির জন্যও এটি করার চেষ্টা করছি এবং আমি তা ঘটতে পারছি না:
server {
...
root /var/www/someserver.com;
error_page 404 /404.html;
location ~* ^/(404\.html)$ {
error_page 404 = @default;
}
location @default {
root /var/www/default;
}
}
মনে রাখবেন যে এই "কাজ করে" এই অর্থে যে আপনি যদি someserver.com/404.html দেখতে যান তবে এটি প্রথমে /var/www/someserver.com/404.html লোড করার চেষ্টা করবে এবং তারপরে / var / www / ডিফল্টে পড়ে যাবে /404.html যদি এটি না পাওয়া যায়। যাইহোক, যদি আপনি someserver.com/blahblah যান, এটি 404 পৃষ্ঠাটি কেবলমাত্র /var/www/someserver.com/ এ সেট করা থাকলে দেখায়। ফাইলটি উপস্থিত না থাকলে এটি ডিফল্ট ডিরেক্টরিতে ফিরে আসে না।
যাইহোক, আপনি সম্ভবত যা অর্জন করতে চাইছিলাম তা করতে পারেন (এজন্য আমি প্রথম কাজের উদাহরণটি অন্তর্ভুক্ত করেছি)।
কোন ধারনা?
সম্পাদনা:
মার্টিন এফ এর উত্তরের ভিত্তিতে, এটিই আমি একসাথে রেখে শেষ করেছি:
# Doesn't work when error page is returned on a POST request
server {
...
root /var/www/someserver.com;
error_page 404 = @notfound;
error_page 500 502 504 = @server_error;
error_page 503 = @maintenance;
location @notfound {
try_files /404.html /../default/404.html =404;
}
location @server_error {
try_files /500.html /../default/500.html =500;
}
location @maintenance {
try_files /503.html /../default/503.html =503;
}
}
এটি দুর্দান্ত কাজ করে। উপরের ত্রুটি_পৃষ্ঠাগুলি এবং অবস্থানগুলির প্রকৃত ব্লকটি একটি সার্ভার_দেফাফলস.কোনফ ফাইলে রয়েছে যা প্রতিটি ভার্চুয়াল হোস্টের সাথে অন্তর্ভুক্ত হয়, এই কারণেই আমি প্রতিটি লোকেশনে পাথটি হার্ড কোড করি নি এবং ডিফল্টগুলির জন্য একটি আপেক্ষিক পথ ব্যবহার করি।
সম্পাদনা 2:
এই পদ্ধতির একটি সমস্যা আছে। যদি আপনি এমন কোনও URL- এ পোস্ট করেন যা কোনও ত্রুটি ফিরিয়ে দেয়, তবে POST অনুরোধ পদ্ধতিটি চেষ্টা_ফাইলে প্রচেষ্টা সহ প্রেরণ হয়। এটি (আমার জন্য) একটি 405 মঞ্জুরিপ্রাপ্ত ত্রুটির ফলস্বরূপ, কারণ এনজিনেক্স মূলত কেবল পৃষ্ঠাটি পাওয়ার পরিবর্তে উদাহরণস্বরূপ /default/500.html পোষ্ট করার চেষ্টা করছে।
সম্পাদনা 3:
আমি এমন একটি সমাধান পোস্ট করেছি যা কাজ করে যা আমার আসল ধারণার অনেক কাছাকাছি।