Nginx সমস্ত পুরানো ডোমেন সাবডোমেনগুলি নতুনকে পুনর্নির্দেশ করে


10

আমার খুব দীর্ঘ ডোমেন ছিল, তাই আমি এটিকে আরও খাটো এবং আরও বন্ধুত্বপূর্ণ একটিতে পরিবর্তন করার সিদ্ধান্ত নিয়েছি। তবে যেহেতু আমার প্রচুর সাবডোমেন রয়েছে (আসলে আমার একটি সাবডোমেন ওয়াইল্ডকার্ড রয়েছে) তাই আমি কেবল ডোমেনের অংশটি পরিবর্তন করার সময় সাবডোমেন রাখতে চাইছিলাম। সুতরাং, আমি নিম্নলিখিত বিধি তৈরি করেছি:

server {
  listen 80;
  server_name ~^(\w+)\.olddomain\.com$;

  rewrite ^ $scheme://$1.doma.in$request_uri? permanent;
}

এই স্নিপেটটি সমস্যার সমাধান করে যেখানে আমি আরও অনেকগুলি প্রশ্ন পড়েছি। তবে আমার সাথে, এনগিনেক্স সর্বদা .domain.inকোনও সাবডোমেন ছাড়াই পুনঃনির্দেশ করে । আমি কী মিস করছি? আমি regex101 এর বিপরীতে রেজেক্স পরীক্ষা করেছি এবং উদাহরণগুলি ভাল কাজ করে, এনগিনেক্স মনে হয় এটি পুনর্নির্দেশ করতে অক্ষম।

উত্তর:


22

যেহেতু nginx 0.8.25 নামের ক্যাপচারগুলি সার্ভার_নামে ব্যবহার করা যেতে পারে। আপনি তাদের ব্যবহার করা উচিত।

এখানে সাব-ডোমেনটি পরিবর্তিত একটি ভেরিয়েবলে সংরক্ষণ করা হবে $sub। তারপরে আপনি এটিকে পুনরায় ব্যবহার করতে সক্ষম হবেন rewriteনির্দেশে:

server {
  listen 80;
  server_name ~^(?<sub>\w+)\.olddomain\.com$;
  rewrite ^ $scheme://$sub.doma.in$request_uri? permanent;
}

বিকল্পভাবে, আপনি আপনার আসল রেজেক্স রাখতে পারেন $1এবং কোনও returnনির্দেশিকায় ব্যবহার করতে পারেন :

server {
  listen 80;
  server_name ~^(\w+)\.olddomain\.com$;
  return 301 $scheme://$1.doma.in$request_uri;
}

পরিশেষে, দ্রষ্টব্য যে returnনির্দেশিকা একটি পুনর্নির্দেশের জন্য সেরা পন্থা। আপনি পরতে পারেন pitfalls ব্যবহার rewriteএকটি পুনঃচালনা জন্য।


পারফেক্ট। আমি রিটার্ন পন্থাটি ব্যবহার করেছি তবে এখনও রেজেক্স অংশটির নাম রেখেছি, এটি বোঝা অনেক সহজ।
রানিশাল্ট

যদি আমরা সাবডোমেন (www) ছাড়াও পুনর্নির্দেশ করতে চাই তবে কী হবে? like: sub1.ex.to> sub1.new.in এবং ex.to> www.new.in?
আর ক্যানসার ইয়ানবাকান

1
মনে রাখবেন যে '\ w' নির্দিষ্ট অক্ষরের সাথে মেলে না যা ডোমেন নামগুলিতে থাকতে পারে, যেমন '-'। উপরে Regex তাই পুনর্চালনা করবে test-sub.doma.inকরার .domai.in!
ওল্ফগ্যাং

সাবডোমেনগুলির জন্য \ ডাব্লু + এর পরিবর্তে [\ ডব্লিউ \ - \ _] + ব্যবহার করুন - এবং _
সাজ্জাদ আশরাফ

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