ফাইল উপস্থিত থাকলে Nginx পুনর্লিখনের URL


13

আমাকে এনগিনেক্সের জন্য পুনর্লিখনের নিয়মটি লিখতে হবে যাতে কোনও ব্যবহারকারী কোনও পুরানো চিত্র url এ যাওয়ার চেষ্টা করে:

/images/path/to/image.png

এবং ফাইলটি অস্তিত্বহীন, এখানে পুনর্নির্দেশ করার চেষ্টা করুন:

/website_images/path/to/image.png

কেবলমাত্র নতুন ইউআরএলে চিত্রটি উপস্থিত থাকলে, অন্যথায় 404 দিয়ে চালিয়ে যান our আমাদের হোস্টে এনগিনেক্সের সংস্করণটিতে এখনও ট্রাই_ফাইলস নেই।

উত্তর:


19
location /images/ {
    if (-f $request_filename) {
        break;
    }

    rewrite ^/images/(.*) /new_images/$1 permanent;
}

যদিও, আপনি আপগ্রেড করতে বা আরও ভাল হোস্ট সন্ধান করতে আপনার হোস্টটিকে বাগ করতে চাইতে পারেন।


এটি প্রতি 404 ডানে / নতুন_মেজে পুনঃনির্দেশিত হবে? নতুন চিত্রের ফাইলটি উপস্থিত না থাকলে আমি পুনরায় লেখার কাজটি করতে চাই না
জোসে ফার্নান্দেজ

ফাইলটি বিদ্যমান কিনা তা পরীক্ষা করে এবং যদি পরীক্ষাটি ব্যর্থ হয় তবে এটি নতুন_প্রেমিতে পুনঃনির্দেশ করে। তার পরে কী ঘটে তা এখানে নির্দিষ্ট করা হয়নি।
টাইলার

আমি আশঙ্কা করছি যে আপনার বিকল্পটি এনজিএনএক্স
নদীফল

2
@ রিভারফাল হে, আমি এই পৃষ্ঠার একটি অংশ লিখেছি। আমার উত্তরটি 8 বছর আগে লেখা হয়েছিল তাই হ্যাঁ এটি একটি পুরাতন পুরানো, তবে মূল প্রশ্নটি নির্দিষ্ট করে জানিয়েছে যে তাদের হোস্টটি এনগিনেক্সের সাম্প্রতিক সংস্করণ সরবরাহ করে নি তাই তাদের ট্রাই_ফাইলে অ্যাক্সেস নেই।
মার্টিন Fjordvald

1
@ গুইলাউম ৮86 আমি এ নিয়ে চিন্তিত হব না, যদি একটি + পুনর্লিখন সম্পূর্ণ নিরাপদ থাকে এবং একটি ফাইলের একক স্ট্যাট চেক খুব হালকা ওজন। রক্ষণাবেক্ষণ মোডটি পরীক্ষা করতে ব্যাকএন্ড অ্যাপ্লিকেশনটিতে যাওয়ার চেয়ে এটি অনেক দ্রুত।
মার্টিন Fjordvald

6

দয়া করে ifকোনও অবস্থানের ব্লকের ভিতরে ব্যবহার করবেন না । খারাপ জিনিস হতে পারে।

location ~* ^/images/(.+)$ {
    root /www;
    try_files /path/to/$1 /website_images/path_to/$1 /any/dir/$1 @your404;
}

$1 ট্রাই_ফাইলেস ডিরেক্টরিতে চেষ্টা করার জন্য ফাইলের নাম হয়ে যায়, যা আপনি অর্জন করার চেষ্টা করছেন তার জন্য তৈরি।

এটি, বা, পরীক্ষা না করেই এটি পুনরায় লিখুন। যদি সেই চিত্রটি না থাকে তবে আপনি যেভাবেই 404 পেয়ে যাবেন।


যদিও এই উত্তরটি কঠোরভাবে প্রশ্নের উত্তর দেয় না ("[ try_filesএখনও নয়"), ভবিষ্যতে আগত দর্শকদের জন্য এখানে, এই উত্তরটি আরও বেশি ভোটের দাবিদার।
DerMike

5

আপনি এটির মতো কিছু ব্যবহার করতে পারেন (আপনার নির্দিষ্ট ক্ষেত্রে অনাকাঙ্ক্ষিত):

location ^/images/(?<imgpath>.*)$ {

    set $no_old  0;
    set $yes_new 0;

    if (!-f $request_filename)
    {
        set $no_old 1;
    }

    if (-f ~* "^/new_path/$imgpath")
    {
        set $yes_new 1$no_old;
    }

    # replacement exists in the new path
    if ($yes_new = 11)
    {
        rewrite ^/images/(.*)$ /new_path/$1 permanent;
    }

    # no image in the new path!
    if ($yes_new = 01)
    {
        return 404;
    }
}

কোনটি নেস্টেড ifস্টেটমেন্ট লেখার মূল উপায় , যেহেতু আপনি এনগিনেক্সে বাসা করতে পারবেন না। এই "হ্যাক" এর সরকারী রেফারেন্সের জন্য এখানে দেখুন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.