অবস্থানের পথে এনগিনেক্স ওয়াইল্ডকার্ড / রেজেক্স


22

আমার মতো Nginx কনফিগারেশন 404 টি নিক্ষেপ করেছে .php:

## Any other attempt to access PHP files returns a 404.
location ~* ^.+\.php$ {
    return 404;
}

তবে আমার সাবফোল্ডারটিতে কিছু সূচি.এফপি ফাইল রয়েছে যা আমি চালাতে চাই। বর্তমান কনফিগারেশনটি হ'ল:

location = /sitename/subpage/index.php {
    fastcgi_pass phpcgi; #where phpcgi is defined to serve the php files
}

location = /sitename/subpage2/index.php {
    fastcgi_pass phpcgi; 
}

location = /sitename/subpage3/index.php {
    fastcgi_pass phpcgi; 
}

এটি নিখুঁতভাবে কাজ করে তবে সমস্যাটি সদৃশ অবস্থান এবং এটিতে যদি প্রচুর উপ পৃষ্ঠা থাকে তবে কনফিগারটি বিশাল আকার ধারণ করে।

আমি ওয়াইল্ডকার্ডের মতো চেষ্টা করলাম * এবং কিছু রেজেক্স, যা বলে যে এনজিনেক্স পরীক্ষা পাস করেছে তবে পৃষ্ঠাটি লোড হয় না অর্থাৎ 404. আমি যা চেষ্টা করেছি তা হ'ল:

location = /sitename/*/index.php {
    fastcgi_pass phpcgi;
}

location ~* ^/sitename/[a-z]/index.php$ {
    fastcgi_pass phpcgi;
}

রেগেক্স বা ওয়াইল্ডকার্ড হিসাবে লোকেশনটিতে আমার কোনও পথের নাম থাকার কোনও উপায় আছে কি?

উত্তর:


32

=মধ্যে পরিবর্তক locationব্লক কোনো ওয়াইল্ডকার্ড, প্রিফিক্স ম্যাচিং বা নিয়মিত এক্সপ্রেশন ছাড়া, একটি সঠিক মিল নেই। এ কারণেই এটি কাজ করে না।

আপনার রেজেক্স প্রচেষ্টায়, এবং এর [a-z]মধ্যে একটি একক অক্ষরের সাথে মেলে । এ কারণেই এটি আপনার পক্ষে কাজ করে না।az

আপনার অবস্থানগুলি নীচের মত সেট আপ করা প্রয়োজন। locationবিবৃতি ক্রম নোট করুন । এনজিনেক্স প্রথম মিলনকারী রেজেক্স শর্তটি বেছে নিয়েছে।

location ~ ^/sitename/[0-9a-z]+/index.php$ {
    fastcgi_pass phpcgi;
}

location ~ \.php$ {
    return 404;
}

আমি এখানে কেস সেনসিটিভ মিল ব্যবহার করছি ( ~পরিবর্তে পরিবর্তক ~*)। প্রথম ক্ষেত্রে, আমি পথের প্রথম অংশটির সাথে মেলে, তারপরে এক বা একাধিক সংখ্যার বর্ণমালা / সংখ্যা বর্ণ এবং তারপরে index.php। আপনি ম্যাচের পরিসরটি পরিবর্তন করতে পারেন তবে +"এক বা একাধিক" পুনরাবৃত্তির জন্য মনে রাখবেন ।

দ্বিতীয়টি কোনও ইউআরআইয়ের সাথে শেষ হয় .php। নিয়মিত প্রকাশের উপায়টি কাজ করার কারণে আপনার সংস্করণে অতিরিক্ত অক্ষরের দরকার নেই।


ধন্যবাদ, হ্যাঁ মূল বিষয়টির পুনরাবৃত্তিটি রেজেক্স থেকে অনুপস্থিত ছিল। +ঠিক কর.

1

অর্গান গুরুত্বপূর্ণ, এনগিনেক্সের "অবস্থান" বর্ণনা থেকে :

প্রদত্ত অনুরোধের সাথে মিলে যাওয়া অবস্থানটি সন্ধান করতে, এনজিনেক্স প্রথমে উপসর্গের স্ট্রিংগুলি (উপসর্গের অবস্থানগুলি) ব্যবহার করে সংজ্ঞায়িত অবস্থানগুলি পরীক্ষা করে। তাদের মধ্যে, দীর্ঘতম মিলের উপসর্গের সাথে অবস্থানটি নির্বাচন করা এবং মনে রাখা হয়। তারপরে কনফিগারেশন ফাইলে তাদের উপস্থিতির ক্রম অনুসারে নিয়মিত প্রকাশগুলি পরীক্ষা করা হয়। নিয়মিত এক্সপ্রেশনগুলির অনুসন্ধান প্রথম ম্যাচে শেষ হয় এবং এটির সাথে সম্পর্কিত কনফিগারেশন ব্যবহার করা হয়। যদি নিয়মিত অভিব্যক্তির সাথে কোনও মিল না পাওয়া যায় তবে পূর্বে মনে রাখা উপসর্গের অবস্থানটি কনফিগারেশন ব্যবহার করা হয়।

এর অর্থ:

  • প্রথম =। ("দীর্ঘতম ম্যাচিং উপসর্গ" ম্যাচ)
  • তারপরে নিখুঁত। ("দীর্ঘতম ম্যাচিং উপসর্গ" ম্যাচ)
  • তারপরে রিজেক্স (প্রথম ম্যাচ)

আপনাকে রেজেক্স অংশগুলির ক্রম সামঞ্জস্য করতে হবে।

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