এনগিনেক্স একটি পথ অন্য পথে নিয়ে যায়


51

আমি নিশ্চিত যে এটি আগে জিজ্ঞাসা করা হয়েছিল, তবে আমি কার্যকর সমাধান খুঁজে পাচ্ছি না।

একটি ওয়েবসাইট সিএমএস পরিষেবাদি পরিবর্তন করেছে, তবে একই ডোমেন রয়েছে, আমি কীভাবে একটি একক পৃষ্ঠার জন্য একটি এনজিনেক্স পুনর্লিখন সেট আপ করব?

যেমন

পুরাতন পৃষ্ঠা

http://sitedomain.co.uk/content/unique-page-name

নতুন পাতা

http://sitedomain.co.uk/new-name/unique-page-name

দয়া করে নোট করুন , আমি চাই না যে সামগ্রীর পৃষ্ঠায় থাকা সমস্ত কিছুই পুনঃনির্দেশিত করা হোক, তবে আক্ষরিক অর্থে কেবল উপরে উল্লিখিত ইউআরএল। আমার সেট আপ করতে প্রায় 9 টি পুনঃনির্দেশ রয়েছে, যার মধ্যে কোনও প্যাটার্নে উপযুক্ত নয়।

ধন্যবাদ!

সম্পাদনা করুন: আমি এই সমাধানটি পেয়েছি, যা মনে হচ্ছে এটি কাজ করছে, এটি কোনও স্ল্যাশ ছাড়াই পুনঃনির্দেশের সত্যতা ব্যতীত:

if ( $request_filename ~ content/unique-page-name/ ) {
   rewrite ^ http://sitedomain.co.uk/new-name/unique-page-name/? permanent;
}

তবে এটি পুনঃনির্দেশ করে:

http://sitedomain.co.uknew-name/unique-page-name/

উত্তর:


87

পিটফলস এবং সাধারণ ভুলগুলি থেকে সরাসরি উক্তি : ট্যাক্স পুনর্নির্মাণগুলি :

রিটার্ন নির্দেশিকা ব্যবহার করে আমরা সম্পূর্ণরূপে নিয়মিত প্রকাশের মূল্যায়ন এড়াতে পারি।

স্থায়ী পুনঃনির্দেশগুলির returnপরিবর্তে দয়া করে ব্যবহার করুন rewrite। এখানে এই ব্যবহারের ক্ষেত্রে আমার পদ্ধতির ...

location = /content/unique-page-name {
  return 301 /new-name/unique-page-name;
}

1
এটি অবশ্যই আরও পাঠযোগ্য। এটি কি মূল URL- এ থাকা কোনও প্রশ্নকে ধরে রাখতে পারে?
স্টিভ এডসন

1
নাঃ। এটা হবে না। আপনি কি সত্যিই স্থায়ী পুনঃনির্দেশ উপর কোন প্রশ্নের বজায় রাখতে চান, তাহলে এই সামান্য কৌতুক ... দেখুন gist.github.com/pothi/7152399
Pothi Kalimuthu

1
আমি কি ভেবে ভেবে ঠিক আছি যে ifএনজিনেক্সে স্টেটমেন্ট ব্যবহার করা খারাপ? পুনর্লিখন পদ্ধতিটি ব্যবহার করার চেয়ে এটি কি আরও ভাল অনুশীলন হতে পারে?
স্টিভিডসন

1
ifরিটার্ন ডিরেক্টরের সাথে ব্যবহার করা পুরোপুরি ঠিক। Wiki.nginx.org/IfIsEvil দেখুন । হ্যাঁ, আইএমও, পুনর্লিখন ব্যবহার করার চেয়ে এটি ভাল।
পোথি কলিমুথু

13

আপনি যদি বিবৃতি এড়াতে পারেন তবে আদর্শভাবে আপনার ব্যবহার করা উচিত নয়। এর মতো কিছু কাজ করতে পারে (অচির্তিত)।

location ~ /content/(.*)$ {
    rewrite ^ /new-name/$1?$args permanent;
} 

1
এটি কি কন্টেন্ট ডিরেক্টরিতে সমস্ত কিছু ধরবে না? আমি কেবল পৃথক আইটেমটি পুনর্নির্দেশ করতে চাই। উদাহরণস্বরূপ, কন্টেন্ট ডিরেক্টরিতে আমার অন্য আইটেম রয়েছে, তবে আমার এটি পুনঃনির্দেশ করা দরকার ... / অন্য-নতুন-নাম / অনন্য-পৃষ্ঠা-নাম 2
স্টিভএডসন

1
আমি সমাধান করেছি। এটিকে সঠিকভাবে পুনঃনির্দেশিত করে দেখায়, তবে স্ক্রিপ্টটি মারছে যা URL পরে ম্যাঙ্গাল করছে।
স্টিভ এডসন

1
আহ, আমি প্রশ্নটি ভুল বুঝেছি। আমি ভেবেছিলাম আপনি কেবল সামগ্রীর অংশ পরিবর্তন করতে চেয়েছিলেন। নীতি একই থাকে। আমি আনন্দিত এটি আপনার জন্য কাজ করে।

1
সমস্যা নেই, সাহায্যের জন্য ধন্যবাদ যদিও, ভবিষ্যতে আমার অবশ্যই এটি ব্যবহার করা দরকার।
স্টিভ এডসন

12

আমি নিম্নলিখিত সমাধানটি ব্যবহার করেছি:

rewrite ^(/content/unique-page-name)(.*)$   http://sitedomain.co.uk/new-name/unique-page-name/$2 permanent;

একটি ট্রিট কাজ করে।


8

আমার জন্য এটি সমান চিহ্ন ছাড়া এইভাবে কাজ করেছিল:

location /old-url {
  return 301 /new-url;
}

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