ওপি একটি উদাহরণ পছন্দ করেছেন। এছাড়াও, @ এমনায়েভ যা লিখেছেন, সে গল্পেরই একটি অংশ ছিল! তো, আমরা এখানে যাই ...
উদাহরণ 1: না (ব্রেক বা শেষ) পতাকাগুলি
server {
server_name example.com;
root 'path/to/somewhere';
location / {
echo 'finally matched location /';
}
location /notes {
echo 'finally matched location /notes';
}
location /documents {
echo 'finally matched location /documents';
}
rewrite ^/([^/]+.txt)$ /notes/$1;
rewrite ^/notes/([^/]+.txt)$ /documents/$1;
}
ফলাফল:
# curl example.com/test.txt
finally matched location /documents
ব্যাখ্যা:
জন্য rewrite
, পতাকাগুলি alচ্ছিক!
উদাহরণ 2: বাইরের অবস্থানের ব্লক (বিরতি বা শেষ)
server {
server_name example.com;
root 'path/to/somewhere';
location / {
echo 'finally matched location /';
}
location /notes {
echo 'finally matched location /notes';
}
location /documents {
echo 'finally matched location /documents';
}
rewrite ^/([^/]+.txt)$ /notes/$1 break; # or last
rewrite ^/notes/([^/]+.txt)$ /documents/$1; # this is not parsed
}
ফলাফল:
# curl example.com/test.txt
finally matched location /notes
ব্যাখ্যা:
বাইরে অবস্থান ব্লক, উভয় break
এবং last
সঠিক আচরণ ...
- পুনর্লিখনের শর্তগুলির আর কোনও বিশদকরণ নয়
- Nginx অভ্যন্তরীণ ইঞ্জিন পরবর্তী পর্যায়ে যায় (
location
ম্যাচের জন্য সন্ধান করছে )
উদাহরণ 3: লোকেশন ব্লকের ভিতরে - "বিরতি"
server {
server_name example.com;
root 'path/to/somewhere';
location / {
echo 'finally matched location /';
rewrite ^/([^/]+.txt)$ /notes/$1 break;
rewrite ^/notes/([^/]+.txt)$ /documents/$1; # this is not parsed
}
location /notes {
echo 'finally matched location /notes';
}
location /documents {
echo 'finally matched location /documents';
}
}
ফলাফল:
# curl example.com/test.txt
finally matched location /
ব্যাখ্যা:
কোনও অবস্থানের ব্লকের ভিতরে break
পতাকাটি নিম্নলিখিতগুলি করবে ...
- পুনর্লিখনের শর্তগুলির আর কোনও বিশদকরণ নয়
- Nginx অভ্যন্তরীণ ইঞ্জিন বর্তমান
location
ব্লকটি বিশ্লেষণ করতে অবিরত
উদাহরণ 4: লোকেশন ব্লকের ভিতরে - "শেষ"
server {
server_name example.com;
root 'path/to/somewhere';
location / {
echo 'finally matched location /';
rewrite ^/([^/]+.txt)$ /notes/$1 last;
rewrite ^/notes/([^/]+.txt)$ /documents/$1; # this is not parsed
}
location /notes {
echo 'finally matched location /notes';
rewrite ^/notes/([^/]+.txt)$ /documents/$1; # this is not parsed, either!
}
location /documents {
echo 'finally matched location /documents';
}
}
ফলাফল:
# curl example.com/test.txt
finally matched location /notes
ব্যাখ্যা:
কোনও অবস্থানের ব্লকের ভিতরে last
পতাকাটি নিম্নলিখিতগুলি করবে ...
- পুনর্লিখনের শর্তগুলির আর কোনও বিশদকরণ নয়
- Nginx অভ্যন্তরীণ ইঞ্জিন ফলাফলের ফলাফলের উপর ভিত্তি করে অন্য একটি লোকেশন ম্যাচ সন্ধান করতে শুরু করে
rewrite
।
- পুনর্লিখনের শর্তগুলির আর কোনও বিশদকরণ নয়, এমনকি পরবর্তী অবস্থানের ম্যাচে!
সারাংশ:
rewrite
পতাকা break
বা last
ম্যাচগুলির সাথে একটি শর্ত যখন , Nginx আর কোনও বিশ্লেষণ বন্ধ করে rewrites
!
- অবস্থান ব্লকের বাইরে
break
বা এর সাথে last
এনজিনেক্স একই কাজ করে (শর্তাদি পুনরায় লেখার প্রক্রিয়া বন্ধ করে দেয়)।
- এর সাথে কোনও অবস্থানের ব্লকের ভিতরে
break
, এনগিনেক্স কেবল শর্তগুলি পুনরায় লেখার জন্য কেবল প্রক্রিয়াজাতকরণ বন্ধ করে দেয়
- এর সাথে একটি অবস্থানের ব্লকের ভিতরে
last
, এনগিনেক্স শর্তগুলি পুনরায় লেখার প্রক্রিয়া বন্ধ করে এবং তারপরে ব্লকের একটি নতুন মিলের সন্ধান করতে শুরু করেlocation
! এনগিনেক্স rewrites
নতুন location
ব্লকে কোনওটিকেও উপেক্ষা করে !
চূড়ান্ত দ্রষ্টব্য:
আমি আরও কিছু প্রান্তের কেস অন্তর্ভুক্ত করতে মিস করেছি (যেমন পুনরায় লেখার ক্ষেত্রে সাধারণ সমস্যা 500 internal error
)। তবে, এটি এই প্রশ্নের আওতার বাইরে থাকবে। সম্ভবত, উদাহরণ 1 এর বাইরেও রয়েছে!