রেফারেন্স: মোড_উইরাইট, ইউআরএল পুনর্লিখন এবং "সুন্দর লিঙ্কগুলি" ব্যাখ্যা করা হয়েছে


142

"সুন্দর লিঙ্কগুলি" প্রায়শই অনুরোধ করা একটি বিষয়, তবে এটি খুব কমই পুরো ব্যাখ্যা করা হয়। মোড_উইরাইট হ'ল "সুন্দরী লিঙ্কগুলি" তৈরি করার একটি উপায়, তবে এটি জটিল এবং এর বাক্য গঠনটি খুব সংক্ষিপ্ত, আঁকানো শক্ত, এবং ডকুমেন্টেশন এইচটিটিপি-তে একটি দক্ষতার একটি স্তরকে ধরে নিয়েছে। কীভাবে "সুন্দর লিঙ্কগুলি" কাজ করে এবং কীভাবে মোড_উইরাইট তৈরি করতে সেগুলি ব্যবহার করা যেতে পারে তা সহজ শর্তে কেউ ব্যাখ্যা করতে পারেন?

অন্যান্য সাধারণ নাম, উপাধি, পরিষ্কার ইউআরএলগুলির শর্তাদি: বিশ্রামের ইউআরএল, ব্যবহারকারী-বান্ধব ইউআরএল, এসইও -বন্ধুত্বপূর্ণ ইউআরএল, স্লাগিং এবং এমভিসি ইউআরএল (সম্ভবত কোনও মিসনোমার)


2
স্লাগ বা স্লাগিং হ'ল সুন্দর ইউআরএলগুলির জন্য আর একটি সাধারণ নাম / শব্দ।
মাইক বি

2
@ মাইকে বাছাই করুন তবে স্লাগগুলি প্রায়শই বেশ কয়েকটি ইউআরএল এর একটি অংশ । একটি স্লাগ খুব নির্দিষ্টভাবে বলা হয়, উদাহরণস্বরূপ, কোনও নিবন্ধের শিরোনামটি ইউআরএল-বান্ধব আকারে পরিণত হয় যা সেই নিবন্ধটির সনাক্তকারী হিসাবে কাজ করে। reference-mod-rewrite-url-rewriting-explainedস্লাগও তাই , /questions/20563772/reference-mod-rewrite-url-rewriting-explainedবেশ ইউআরএল।
ছদ্মবেশ

2
আমি মনে করি যে এই প্রশ্নটির একটি লিঙ্ক অন্তর্ভুক্ত করার জন্য ট্যাগ .htaccessএবং mod-rewriteট্যাগগুলি আপডেট করা উচিত, কারণ এটি নিয়মিতভাবে যা জিজ্ঞাসা করা হয় তার অনেকগুলি অংশ জুড়ে। থটস?
মাইক রকট

উত্তর:


110

কোন ওয়েব সার্ভারটি কীভাবে কাজ করে তা বুঝতে প্রথমে মোড_আরাইটটি বোঝার দরকার। একটি ওয়েব সার্ভার HTTP অনুরোধের প্রতিক্রিয়া জানায় । এটির সবচেয়ে বেসিক স্তরে একটি এইচটিটিপি অনুরোধটি দেখতে এরকম দেখাচ্ছে:

GET /foo/bar.html HTTP/1.1

এটি কোনও ওয়েব সার্ভারের URL টি /foo/bar.html থেকে URL টি অনুরোধ করার জন্য এটি একটি ব্রাউজারের সাধারণ অনুরোধ । এটি চাপ দেওয়ার জন্য গুরুত্বপূর্ণ যে এটি কোনও ফাইলের জন্য অনুরোধ করে না , এটি কেবল কিছু স্বেচ্ছাসেবী URL এর জন্য অনুরোধ করে। অনুরোধটিও এর মতো দেখতে পারে:

GET /foo/bar?baz=42 HTTP/1.1

এটি ঠিক একটি ইউআরএল-এর অনুরোধ হিসাবে বৈধ এবং এটির সাথে স্পষ্টতই ফাইলগুলির সাথে কোনও সম্পর্ক নেই।

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

বেশিরভাগ ওয়েব সার্ভারের ডিফল্ট কনফিগারেশন হ'ল এমন একটি ফাইল সন্ধান করা যা হার্ড ডিস্কের URL টি মিলবে। যদি নথি রুট সার্ভারের সেট করা থাকে, বলুন, /var/wwwতা চেহারা কিনা দায়ের করতে পারেন /var/www/foo/bar.htmlবিদ্যমান এবং এটা যদি তাই হয় পরিবেশন করা। যদি ফাইলটি "। Php" এ শেষ হয় তবে এটি পিএইচপি ইন্টারপ্রেটারকে অনুরোধ করবে এবং তারপরে ফলাফলটি ফিরিয়ে দেবে। এই সমস্ত সমিতি সম্পূর্ণরূপে কনফিগারযোগ্য; ওয়েব সার্ভারকে পিএইচপি ইন্টারপ্রেটারের মাধ্যমে এটি চালানোর জন্য কোনও ফাইল ".php" এ শেষ হতে হয় না এবং কিছু ঘটতে URL টি ডিস্কের কোনও নির্দিষ্ট ফাইলের সাথে মেলে না।

অভ্যন্তরীণ অনুরোধ পরিচালনার পুনর্লিখনের জন্য মোড_উইরাইট way যখন ওয়েব সার্ভারটি ইউআরএলটির জন্য একটি অনুরোধ পেয়েছে /foo/bar, ওয়েব সার্ভারটি এটির সাথে মিলানোর জন্য ডিস্কে কোনও ফাইল সন্ধান করার আগে আপনি সেই URL টি অন্য কোনওটিতে আবার লিখতে পারেন । সাধারণ উদাহরণ:

RewriteEngine On
RewriteRule   /foo/bar /foo/baz

এই নিয়মটি বলে যে যখনই কোনও অনুরোধ "/ foo / bar" এর সাথে মেলে, এটি আবার "/ foo / baz" এ লিখুন। অনুরোধটি তখন পরিচালনা করা হবে যেন /foo/bazপরিবর্তে অনুরোধ করা হয়েছিল। এটি বিভিন্ন প্রভাবের জন্য ব্যবহার করা যেতে পারে, উদাহরণস্বরূপ:

RewriteRule (.*) $1.html

এই নিয়মটি কোনও কিছুর ( .*) সাথে মেলে এবং এটি ( ) ক্যাপচার করে (..), তারপরে এটি ".html" সংযুক্ত করার জন্য এটি পুনর্লিখন করে। অন্য কথায়, যদি /foo/barঅনুরোধ করা URL ছিল তবে এটি পরিচালনা করা হবে যেমন /foo/bar.htmlঅনুরোধ করা হয়েছিল। নিয়মিত এক্সপ্রেশন ম্যাচিং, ক্যাপচারিং এবং প্রতিস্থাপন সম্পর্কে আরও তথ্যের জন্য http://regular-expressions.info দেখুন ।

আরেকটি প্রায়শই নিয়মের মুখোমুখি হ'ল:

RewriteRule (.*) index.php?url=$1

এটি আবার কোনও কিছুর সাথে মিলে যায় এবং urlক্যোয়ারী প্যারামিটারে যুক্ত মূলত অনুরোধ করা ইউআরএল সহ ফাইল সূচি.পি.পি. তে এটি আবার লিখে দেয় । অর্থাত্, যে কোনও এবং সমস্ত অনুরোধগুলি আসার জন্য, ফাইল ইনডেক্স.এফপি সম্পাদিত হয় এবং এই ফাইলটির মূল অনুরোধটিতে অ্যাক্সেস থাকবে $_GET['url'], সুতরাং এটি এটি দিয়ে যা কিছু করতে পারে তা করতে পারে।

প্রাথমিকভাবে আপনি নিজের ওয়েব সার্ভার কনফিগারেশন ফাইলে এই পুনর্লিখনের নিয়মগুলি রেখেছেন । অ্যাপাচি * আপনাকে সেগুলি .htaccessআপনার ডকুমেন্টের মূলের (যেমন আপনার .pp ফাইলগুলির পাশের) মধ্যে ডাকা একটি ফাইলে রাখতে দেয় ।

* যদি প্রাথমিক এ্যাপাচি কনফিগারেশন ফাইল দ্বারা অনুমোদিত; এটি alচ্ছিক, তবে প্রায়শই সক্ষম।

Mod_rewrite কী না কি

মোড_উইরাইট আপনার সমস্ত ইউআরএলগুলিকে "সুন্দর" করে না mag এটি একটি সাধারণ ভুল বোঝাবুঝি। আপনার ওয়েব সাইটে এই লিঙ্কটি থাকলে:

<a href="https://stackoverflow.com/my/ugly/link.php?is=not&amp;very=pretty">

মোড_উইরাইট কিছুই সুন্দর করতে এটি করতে পারে না। এটি একটি সুন্দর লিঙ্ক করতে, আপনার করতে হবে:

  1. সুন্দর লিঙ্কে লিঙ্কটি পরিবর্তন করুন:

    <a href="https://stackoverflow.com/my/pretty/link">
    
  2. /my/pretty/linkউপরে বর্ণিত যেকোন একটি পদ্ধতি ব্যবহার করে ইউআরএলের অনুরোধটি পরিচালনা করতে সার্ভারে mod_rewrite ব্যবহার করুন ।

( mod_substituteবহির্গামী HTML পৃষ্ঠাগুলি এবং তাদের থাকা লিঙ্কগুলিকে রূপান্তর করতে কেউ একত্রে ব্যবহার করতে পারে Though যদিও এটি কেবলমাত্র আপনার HTML সংস্থান আপডেট করার চেয়ে সাধারণভাবে বেশি প্রচেষ্টা))

অনেকগুলি মোড_উইরাইট করতে পারে এবং খুব জটিল মেলানো নিয়ম রয়েছে যা আপনি তৈরি করতে পারেন যার মধ্যে বেশ কয়েকটি পুনর্লিখনের শৃঙ্খলাবদ্ধতা, সম্পূর্ণ আলাদা পরিষেবা বা মেশিনে প্রক্সিং অনুরোধ, প্রতিক্রিয়া হিসাবে নির্দিষ্ট এইচটিটিপি স্থিতি কোডগুলি ফিরিয়ে দেওয়া, অনুরোধগুলি পুনর্নির্দেশকরণ ইত্যাদি খুব কার্যকর এবং এটি ব্যবহার করা যেতে পারে আপনি যদি এইচটিটিপি-র অনুরোধ-প্রতিক্রিয়া প্রক্রিয়াটি বুঝতে পারেন তবে দুর্দান্ত। এটি আপনার লিঙ্কগুলি স্বয়ংক্রিয়ভাবে সুন্দর করে না

সমস্ত সম্ভাব্য পতাকা এবং বিকল্পগুলির জন্য অফিসিয়াল ডকুমেন্টেশন দেখুন ।


6
সম্ভবত প্রেরণকারীকে পুনর্লিখনের প্রিফার্ড উপায় হিসাবে সংস্করণ ২.২.১6 এ প্রবর্তিত ফলব্যাক রিসোর্স নির্দেশিকা উল্লেখ করুন
দারস্টার

78

জালিয়াতির উত্তরটি প্রসারিত করতে , আমি কয়েকটি অন্যান্য মডেল_রাইট কার্যকারিতার কয়েকটি উদাহরণ এবং ব্যাখ্যা সরবরাহ করতে চেয়েছিলাম।

নীচের সমস্ত উদাহরণ ধরে নেওয়া যায় যে আপনি ইতিমধ্যে RewriteEngine Onআপনার .htaccessফাইলটিতে অন্তর্ভুক্ত করেছেন ।

পুনর্লিখন উদাহরণ

এই উদাহরণটি নেওয়া যাক:

RewriteRule ^blog/([0-9]+)/([A-Za-z0-9-\+]+)/?$ /blog/index.php?id=$1&title=$2 [NC,L,QSA]

বিধিটি 4 টি বিভাগে বিভক্ত:

  1. RewriteRule - পুনর্লিখনের নিয়ম শুরু হয়
  2. ^blog/([0-9]+)/([A-Za-z0-9-\+]+)/?$ - এটিকে নিদর্শন বলা হয়, তবে আমি কেবল এটি নিয়মের বাম দিক হিসাবে উল্লেখ করব - আপনি যা থেকে আবার লিখতে চান
  3. blog/index.php?id=$1&title=$2 - প্রতিস্থাপন, বা পুনর্লিখনের নিয়মের ডানদিকে ডাকা - আপনি কী লিখতে চান
  4. [NC,L,QSA] পুনর্লিখনের নিয়মের পতাকা, কমা দ্বারা পৃথক, যা আমি পরে আরও ব্যাখ্যা করব

উপরের পুনর্লিখন আপনাকে এমন কিছুতে লিঙ্ক দেওয়ার অনুমতি দেবে /blog/1/foo/এবং এটি আসলে লোড হবে/blog/index.php?id=1&title=foo

বিধি বাম দিকে

  • ^পৃষ্ঠার নামটির সূচনা নির্দেশ করে - সুতরাং এটি আবার লিখতে হবে example.com/blog/...তবে তা নয়example.com/foo/blog/...
  • প্রথম (…)বন্ধনীর প্রতিটি সেট একটি নিয়মিত প্রকাশের প্রতিনিধিত্ব করে যা আমরা নিয়মের ডানদিকে পরিবর্তনশীল হিসাবে ক্যাপচার করতে পারি। এই উদাহরণে:
    • বন্ধনীগুলির প্রথম সেট - ([0-9]+)- সর্বনিম্ন 1 টি অক্ষরের দৈর্ঘ্য এবং কেবলমাত্র সংখ্যাসূচক মানগুলির সাথে (যেমন 0-9) একটি স্ট্রিংয়ের সাথে মেলে matches এটি $1নিয়মের ডানদিকে উল্লেখ করা যেতে পারে
    • প্রথম বন্ধনীর দ্বিতীয় সেটটি দৈর্ঘ্যের সর্বনিম্ন 1 টি অক্ষরের সাথে একটি স্ট্রিংয়ের সাথে মেলে যা কেবলমাত্র বর্ণানুক্রমিক অক্ষর (এজেড, অ্যাজ, বা 0-9) -বা +(নোট +ব্যাকস্ল্যাশ সহ পালানো হয় যেমন এটি ছাড়ার পরে এটি রেজেক্স হিসাবে কার্যকর হবে) পুনরাবৃত্তি চরিত্র )। এটি $2নিয়মের ডানদিকে উল্লেখ করা যেতে পারে
  • ?মানে যে পূর্ববর্তী চরিত্র ঐচ্ছিক, তাই এই ক্ষেত্রে উভয় /blog/1/foo/এবং /blog/1/fooএকই জায়গায় পুনর্লিখন হবে
  • $ ইঙ্গিত করে যে আমরা যে স্ট্রিংয়ের সাথে মিল রাখতে চাই তার শেষ

পতাকা

এগুলি হ'ল বিকল্পগুলি যা আপনার পুনর্লিখনের নিয়মের শেষে নির্দিষ্ট শর্ত নির্দিষ্ট করার জন্য স্কোয়ার বন্ধনীগুলিতে যুক্ত করা হয়। আবার, ডকুমেন্টেশনে আপনি পড়তে পারবেন এমন অনেকগুলি পতাকা রয়েছে তবে আমি আরও কয়েকটি সাধারণ পতাকা ব্যবহার করব:

NC

কোন কেস পতাকা মানে যে লেখা নিয়ম কেস অসংবেদী, তাই এই উপরোক্ত উদাহরণে নিয়ম জন্য অর্থ হবে উভয় /blog/1/foo/এবং /BLOG/1/foo/(বা এই কোন প্রকরণ) মিলেছে করা হবে।

L

শেষ পতাকাটি নির্দেশ করে যে এটিই শেষ নিয়ম যা প্রক্রিয়া করা উচিত। এর অর্থ হ'ল এবং যদি এই নিয়মটি মেলে তবে বর্তমান পুনর্লিখন প্রক্রিয়াজাতকরণ চালনায় আর কোনও বিধি মূল্যায়ন করা হবে না। যদি নিয়মটি না মেলে তবে অন্যান্য সমস্ত নিয়ম যথারীতি চেষ্টা করা হবে। আপনি যদি Lপতাকাটি সেট না করেন তবে নীচের সমস্ত বিধিগুলি পুনরায় লিখিত URL এ প্রয়োগ করা হবে ।

END

অ্যাপাচি ২.৪ থেকে আপনি পতাকাটিও ব্যবহার করতে পারেন [END]। এটির সাথে মিলে যাওয়া নিয়মটি সম্পূর্ণরূপে আরও উপসর্গ / পুনর্লিখন প্রক্রিয়াজাতিকে সমাপ্ত করবে । (যেদিকে [L]পতাকাটি প্রায়শই দ্বিতীয় দফায় ট্রিগার করতে পারে, উদাহরণস্বরূপ যখন সাব-ডিরেক্টরিতে আবার লিখতে বা বাইরে পাঠানো হয়))

QSA

ক্যোরি স্ট্রিং সংযোজন পতাকাটি আমাদের নির্দিষ্ট ইউআরএলগুলিতে অতিরিক্ত ভেরিয়েবলগুলিতে পাস করার অনুমতি দেয় যা মূল পেতে প্যারামিটারগুলিতে যুক্ত হবে। আমাদের উদাহরণস্বরূপ এর অর্থ হল এর মতো কিছু /blog/1/foo/?comments=15লোড হবে/blog/index.php?id=1&title=foo&comments=15

R

এই পতাকাটি আমি উপরের উদাহরণে ব্যবহার করেছিলাম এটি নয়, তবে আমি মনে করি এটি উল্লেখযোগ্য। এটি আপনাকে স্থিতি কোড (যেমন R=301) অন্তর্ভুক্ত করার বিকল্প সহ একটি http পুনর্নির্দেশ নির্দিষ্ট করার অনুমতি দেয় । উদাহরণস্বরূপ, আপনি / মাইব্লগ / টু / ব্লগে 301 পুনর্নির্দেশ করতে চাইলে আপনি কেবল একটি নিয়ম কিছু লিখতে পারেন:

RewriteRule ^/myblog/(*.)$ /blog/$1 [R=301,QSA,L]

শর্তাদি পুনর্লিখন করুন

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

# if the host doesn't start with www. then add it and redirect
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

এটি একটি খুব সাধারণ অনুশীলন, যা আপনার ডোমেনটি আগে থেকেই সরবরাহ করে www.(যদি এটি ইতিমধ্যে সেখানে না থাকে) এবং একটি 301 পুনর্নির্দেশ কার্যকর করে। উদাহরণস্বরূপ, http://example.com/blog/এটি লোড করা আপনাকে পুনর্নির্দেশ করবেhttp://www.example.com/blog/

# if it cant find the image, try find the image on another domain
RewriteCond %{REQUEST_URI} \.(jpg|jpeg|gif|png)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)$ http://www.example.com/$1 [L]

এটি সামান্য কম সাধারণ, তবে ফাইলের নাম ডিরেক্টরিতে বা সার্ভারে বিদ্যমান ফাইল বা ফাইল থাকলে এটি কার্যকর হয় না এমন একটি নিয়মের একটি ভাল উদাহরণ।

  • %{REQUEST_URI} \.(jpg|jpeg|gif|png)$ [NC] কেবলমাত্র jpg, jpeg, gif বা png (কেস সংবেদনশীল) ফাইলের ফাইল এক্সটেনশন সহ ফাইলগুলির পুনর্লিখন সম্পাদন করবে।
  • %{REQUEST_FILENAME} !-f বর্তমান সার্ভারে ফাইলটি রয়েছে কিনা তা পরীক্ষা করে দেখবে এবং পুনর্লিখনটি কার্যকর না করলে কেবল সম্পাদন করবে
  • %{REQUEST_FILENAME} !-d বর্তমান সার্ভারে ফাইলটি রয়েছে কিনা তা পরীক্ষা করে দেখবে এবং পুনর্লিখনটি কার্যকর না করলে কেবল সম্পাদন করবে
  • পুনর্লিখন একই ফাইলটি অন্য ডোমেনে লোড করার চেষ্টা করবে

39

তথ্যসূত্র

স্ট্যাক ওভারফ্লোতে শুরু করার জন্য আরও অনেক দুর্দান্ত সংস্থান রয়েছে:

এবং নতুন আগত-বন্ধুত্বপূর্ণ রেজেক্স ওভারভিউগুলি এমনকি:

স্বতঃ-ব্যবহৃত স্থানধারক

  • .*যে কোনও কিছুর সাথে খালি স্ট্রিংয়েরও মিল রয়েছে। আপনি এই প্যাটার্নটি যে কোনও জায়গায় ব্যবহার করতে চান না, তবে প্রায়শই শেষ ফ্যালব্যাক নিয়মে।
  • [^/]+পাথ বিভাগগুলির জন্য প্রায়শই ব্যবহৃত হয়। এটি ফরোয়ার্ড স্ল্যাশ ছাড়া কিছু মিলছে।
  • \d+ শুধুমাত্র সংখ্যাযুক্ত স্ট্রিংয়ের সাথে মেলে।
  • \w+বর্ণমালার অক্ষরের সাথে মেলে। এটি মূলত শর্টহ্যান্ডের জন্য [A-Za-z0-9_]
  • [\w\-]+"স্লাগ" স্টাইল পাথ বিভাগগুলির জন্য, অক্ষর, সংখ্যা, ড্যাশ এবং ব্যবহার করে- _
  • [\w\-.,]+পিরিয়ড এবং কমা যোগ করে। চশমাগুলিতে একটি পালানো \-ড্যাশ পছন্দ করুন […]
  • \.একটি আক্ষরিক সময় বোঝায়। অন্যথায় এর .বাইরে […]কোনও চিহ্নের জন্য স্থানধারক।

এই স্থানধারকগুলির প্রত্যেককে সাধারণত (…)ক্যাপচার গ্রুপ হিসাবে প্যারেন্টেসিসে আবৃত করা হয় । এবং পুরো প্যাটার্নটি প্রায়শই ^………$শুরুতে + শেষের চিহ্নিতকারীগুলিতে। "নিদর্শনগুলি" উদ্ধৃত করা alচ্ছিক।

RewriteRules

নিম্নলিখিত উদাহরণগুলি পিএইচপি-কেন্দ্রিক এবং কিছুটা বর্ধনশীল, অনুরূপ ক্ষেত্রে মানিয়ে নেওয়া সহজ। এগুলি কেবল সংক্ষিপ্তসার হয়, প্রায়শই আরও বেশি বৈকল্পিক বা বিস্তারিত প্রশ্নোত্তরের সাথে লিঙ্ক হয়।

  • স্ট্যাটিক ম্যাপিং
    /contact,/about

    অভ্যন্তরীণ ফাইল স্কিমগুলিতে কয়েকটি পৃষ্ঠার নাম সংক্ষিপ্ত করা সবচেয়ে সহজ:

     RewriteRule ^contact$  templ/contact.html
     RewriteRule ^about$    about.php
    
  • সংখ্যা শনাক্তকারী
    /object/123

    http://example.com/article/531বিদ্যমান পিএইচপি স্ক্রিপ্টগুলির মতো শর্টকাটগুলি উপস্থাপন করাও সহজ। সংখ্যার স্থানধারককে কেবলমাত্র একটি $_GETপ্যারামিটারে পুনরায় করা যেতে পারে :

     RewriteRule ^article/(\d+)$    article-show.php?id=$1
     #                      └───────────────────────────┘
    
  • স্লাগ-স্টাইলের স্থানধারক
    /article/with-some-title-slug

    /article/title-stringস্থানধারকদের অনুমতি দেওয়ার জন্য আপনি সেই নিয়মটি সহজেই প্রসারিত করতে পারেন :

     RewriteRule ^article/([\w-]+)$    article-show.php?title=$1
     #                       └────────────────────────────────┘
    

    নোট করুন যে আপনার স্ক্রিপ্ট অবশ্যই ডেটাবেস-আইডিতে এই শিরোনামগুলি ম্যাপ করতে সক্ষম হবে (বা অভিযোজিত হবে)। একমাত্র RewritRules পাতলা বায়ু থেকে তথ্য তৈরি বা অনুমান করতে পারে না।

  • সংখ্যার উপসর্গ সহ স্লাগস
    /readable/123-plus-title

    সুতরাং আপনি প্রায়শই /article/529-title-slugঅনুশীলনে ব্যবহৃত মিশ্র পথগুলি দেখতে পাবেন :

     RewriteRule ^article/(\d+)-([\w-]+)$    article.php?id=$1&title=$2
     #                      └───────────────────────────────┘
    

    এখন আপনি title=$2যেভাবেই পাসিং এড়িয়ে যেতে পারেন , কারণ আপনার স্ক্রিপ্টটি সাধারণত কোনওভাবেই ডাটাবেস-আইডির উপর নির্ভর করবে। -title-slugঅবাধ URL টি প্রসাধন পরিণত হয়েছে।

  • বিকল্প তালিকার সাথে ইউনিফর্মিটি
    /foo/… /bar/… /baz/…

    যদি আপনার একাধিক ভার্চুয়াল পৃষ্ঠাগুলির জন্য একই রকম নিয়ম থাকে তবে আপনি |বিকল্প তালিকার সাথে তাদের মেলাতে এবং সংযোগ করতে পারবেন । এবং আবার কেবল তাদের অভ্যন্তরীণ জিইটি প্যারামিটারগুলিতে পুনরায় নিয়োগ করুন:

     #                               ┌─────────────────────────┐
     RewriteRule ^(blog|post|user)/(\w+)$  disp.php?type=$1&id=$2
     #               └───────────────────────────────────┘
    

    এগুলি RewriteRuleখুব জটিল হওয়া উচিত আপনি এগুলি পৃথক পৃথক ওকে ভাগ করতে পারেন ।

  • বিভিন্ন ব্যাকেন্ডে সম্পর্কিত ইউআরএল প্রেরণ করা
    /date/SWITCH/backend

    বিকল্প তালিকার আরও ব্যবহারিক ব্যবহার হ'ল স্বতন্ত্র স্ক্রিপ্টগুলিতে অনুরোধের পাথ ম্যাপিং। উদাহরণস্বরূপ, বয়স্কদের জন্য অভিন্ন ইউআরএল এবং তারিখের ভিত্তিতে একটি নতুন ওয়েব অ্যাপ্লিকেশন সরবরাহ করা:

     #                   ┌─────────────────────────────┐
     #                   │                 ┌───────────┼───────────────┐
     RewriteRule ^blog/(2009|2010|2011)/([\d-]+)/?$ old/blog.php?date=$2
     RewriteRule ^blog/(\d+)/([\d-]+)/?$  modern/blog/index.php?start=$2
     #                          └──────────────────────────────────────┘
    

    এটি কেবলমাত্র একটি স্ক্রিপ্টে 2009-2011 পোস্টগুলিকে পুনরায় তৈরি করে এবং অন্য সমস্ত বছর অন্য হ্যান্ডলারের সাথে অন্তর্ভুক্ত। প্রথমে আরও নির্দিষ্ট নিয়মটি নোট করুন । প্রতিটি স্ক্রিপ্ট বিভিন্ন জিইটি প্যারাম ব্যবহার করতে পারে।

  • কেবল /পথ স্ল্যাশ ব্যতীত অন্যান্য ডিলিমিটার
    /user-123-name

    ভার্চুয়াল ডিরেক্টরি কাঠামোর অনুকরণের জন্য আপনি সাধারণত রাইরাইটরুলস দেখতে পাচ্ছেন। তবে আপনাকে অব্রাহামিত হতে বাধ্য করা হচ্ছে না। আপনি পাশাপাশি বিভাগ -বা কাঠামো জন্য হাইফেন ব্যবহার করতে পারেন ।

     RewriteRule ^user-(\d+)$    show.php?what=user&id=$1
     #                   └──────────────────────────────┘
     # This could use `(\w+)` alternatively for user names instead of ids.
    

    সাধারণ /wiki:section:Page_Nameপ্রকল্পের জন্য:

     RewriteRule ^wiki:(\w+):(\w+)$  wiki.php?sect=$1&page=$2 
     #                   └─────┼────────────────────┘       │
     #                         └────────────────────────────┘
    

    মাঝেমধ্যে এটা মধ্যে বিকল্প করার জন্য উপযুক্ত /-delimiters এবং :বা .একই নিয়ম এমনকি। অথবা বিভিন্ন স্ক্রিপ্টগুলিতে রূপগুলি মানচিত্র করতে পুনরায় দুটি পুনর্লিখন রয়েছে have

  • Ptionচ্ছিক পিছনে /স্ল্যাশ
    /dir=/dir/

    ডিরেক্টরি-স্টাইলের পাথগুলি বেছে নেওয়ার সময়, আপনি এটি চূড়ান্ত সহ এবং এর বাইরেও পৌঁছাতে পারবেন /

     RewriteRule ^blog/([\w-]+)/?$  blog/show.php?id=$1
     #                         ┗┛
    

    এখন এই হ্যান্ডলগুলি উভয় http://example.com/blog/123এবং /blog/123/। এবং /?$অ্যাপ্রোচটি অন্য কোনও রাইরাইটরুলের সাথে যুক্ত করা সহজ।

  • ভার্চুয়াল পাথের জন্য নমনীয় বিভাগগুলি
    .*/.*/.*/.*

    সর্বাধিক নিয়মের সাথে আপনি /…/পৃথক জিইটি প্যারামিটারগুলিতে সংস্থানীয় সংস্থানসমূহের সংস্থান সেট মানচিত্রের মুখোমুখি হবেন । কিছু স্ক্রিপ্ট অপরিবর্তনীয় সংখ্যক বিকল্পকে পরিচালনা করে । অ্যাপাচি রেজিএক্সএক্স ইঞ্জিন সেগুলির একটি স্বেচ্ছাসেবী সংখ্যাকে optionচ্ছিককরণের অনুমতি দেয় না। তবে আপনি এটিকে সহজেই কোনও বিধি হিসাবে এটি প্রসারিত করতে পারেন:

     Rewriterule ^(\w+)/?$                in.php?a=$1
     Rewriterule ^(\w+)/(\w+)/?$          in.php?a=$1&b=$2
     Rewriterule ^(\w+)/(\w+)/(\w+)/?$    in.php?a=$1&b=$2&c=$3
     #              └─────┴─────┴───────────────────┴────┴────┘
    

    আপনার যদি পাঁচটি পর্যন্ত পাথ বিভাগের প্রয়োজন হয় তবে এই স্কিমটি পাঁচটি নিয়মে অনুলিপি করুন। আপনি অবশ্যই [^/]+প্রতিটি আরও নির্দিষ্ট স্থানধারক ব্যবহার করতে পারেন । এখানে অর্ডারটি ততটা গুরুত্বপূর্ণ নয় যেমন ওভারল্যাপ হয় না। সুতরাং প্রথমে সবচেয়ে ঘন ঘন ব্যবহৃত পাথগুলি ঠিক আছে।

    বিকল্পভাবে আপনি ?p[]=$1&p[]=$2&p[]=3এখানে ক্যোয়ারী স্ট্রিংয়ের মাধ্যমে পিএইচপিগুলি অ্যারে প্যারামিটারগুলি ব্যবহার করতে পারেন - যদি আপনার স্ক্রিপ্টটি কেবল তাদের প্রাক-বিভাজন পছন্দ করে। (যদিও এটি কেবল একটি ক্যাচ-অল নিয়ম ব্যবহার করা বেশি সাধারণ, এবং স্ক্রিপ্টটি নিজেই REQUEST_URI এর বাইরে অংশগুলি প্রসারিত করতে দেয়))

    আরও দেখুন: আমি কীভাবে আমার ইউআরএল পাথ বিভাগগুলিকে ক্যোয়ারিং স্ট্রিং কী-মান জোড়গুলিতে রূপান্তর করব?

  • .চ্ছিক বিভাগসমূহ
    prefix/opt?/.*

    একটি সাধারণ প্রকরণটি একটি নিয়মের মধ্যে alচ্ছিক উপসর্গ থাকে । আপনার কাছে যদি স্থির স্ট্রিং থাকে বা চারপাশে আরও সীমাবদ্ধ স্থানধারীরা থাকে তবে এটি সাধারণত বোধগম্য হয়:

      RewriteRule ^(\w+)(?:/([^/]+))?/(\w+)$  ?main=$1&opt=$2&suffix=$3
    

    এখন সেখানে আরও জটিল প্যাটার্নটি (?:/([^/])+)?কেবল একটি নন-ক্যাপচারিং (?:…) গোষ্ঠীকে আবৃত করে optionচ্ছিক করে তোলে )?। অন্তর্ভুক্ত স্থানধারকটি ([^/]+)প্রতিস্থাপনের ধরণ $2হবে তবে মাঝের কোনও /…/পথ না থাকলে খালি থাকবেন be

  • বাকীটি ক্যাপচার করুন
    /prefix/123-capture/…/*/…whatever…

    আগেই বলা হয়েছে, আপনি প্রায়শই খুব বেশি জেনেরিক পুনর্লিখনের নিদর্শন চান না। তবে এটি .*কখনও কখনও স্থির এবং নির্দিষ্ট তুলনা একত্রিত করার জন্য অর্থবোধ করে না ।

     RewriteRule ^(specific)/prefix/(\d+)(/.*)?$  speci.php?id=$2&otherparams=$2
    

    এটি কোনও /…/…/…চলমান পাথ বিভাগকে alচ্ছিক করে তুলেছে। তবে অবশ্যই তাদের ভাগ করার জন্য হ্যান্ডলিং স্ক্রিপ্টের প্রয়োজন, এবং ভ্যারিয়েবল-ইফি তোলা প্যারামিটারগুলি নিজেই (যা ওয়েব- "এমভিসি" ফ্রেমওয়ার্কগুলি করে)।

  • ট্রেলিং ফাইল "এক্সটেনশানগুলি"
    /old/path.HTML

    ইউআরএলগুলিতে আসলেই ফাইল এক্সটেনশন নেই। এই পুরো রেফারেন্সটি সম্পর্কে যা হয় (= URL গুলি ভার্চুয়াল লোকেটার, অগত্যা কোনও সরাসরি ফাইল সিস্টেম চিত্র নয়)। তবে আপনার যদি আগে 1: 1 ফাইল ম্যাপিং থাকে তবে আপনি সহজ বিধিগুলি নকল করতে পারেন :

     RewriteRule  ^styles/([\w\.\-]+)\.css$  sass-cache.php?old_fn_base=$1
     RewriteRule  ^images/([\w\.\-]+)\.gif$  png-converter.php?load_from=$2
    

    অন্যান্য সাধারণ ব্যবহারগুলি .htmlনতুন .phpহ্যান্ডলারের কাছে অপ্রচলিত পথগুলিকে রিম্যাপ করা বা কেবলমাত্র পৃথক (প্রকৃত / বাস্তব) ফাইলগুলির জন্য ডিরেক্টরি নামগুলি পৃথক করা।

  • পিং-পং (isonক্যবদ্ধভাবে পুনঃনির্দেশ এবং পুনর্লিখন)
    /ugly.html→ →/pretty

    তাই কোনও এক সময় আপনি কেবলমাত্র সুন্দর লিঙ্কগুলি বহন করতে আপনার এইচটিএমএল পৃষ্ঠাগুলি পুনর্লিখন করছেন, ডেজের দ্বারা বর্ণিত হিসাবে । ইতিমধ্যে আপনি এখনও পুরানো পাথগুলির জন্য অনুরোধগুলি পাবেন , কখনও কখনও এমনকি বুকমার্ক থেকেও। হিসাবে কার্যসংক্রান্ত , আপনি পিং-পং করতে প্রদর্শনে ব্রাউজার / নতুন URL গুলি কায়েম কর।

    যখনই কোনও আগত ইউআরএল অপ্রচলিত / কুরুচিপূর্ণ নামকরণের স্কিম অনুসরণ করে তবে এই সাধারণ কৌশলটিতে 30x / অবস্থান পুনঃনির্দেশ পাঠানো জড়িত । এরপরে ব্রাউজারগুলি নতুন / সুন্দর ইউআরএল পুনরায় জিজ্ঞাসা করবে , যা পরে মূল বা নতুন অবস্থানে পুনর্লিখন করা (কেবল অভ্যন্তরীণভাবে)।

     # redirect browser for old/ugly incoming paths
     RewriteRule ^old/teams\.html$ /teams [R=301,QSA,END]
    
     # internally remap already-pretty incoming request
     RewriteRule ^teams$ teams.php        [QSA,END]
    

    নিরাপদ বিকল্পের [END]পরিবর্তে এই উদাহরণটি কীভাবে ব্যবহার করে তা নোট করুন [L]। পুরানো অ্যাপাচি ২.২ সংস্করণগুলির জন্য আপনি কোয়েরি স্ট্রিং প্যারামিটারগুলি পুনরায় তৈরি করার পাশাপাশি অন্যান্য কার্যকার্যগুলিও ব্যবহার করতে পারেন: অসীম লুপগুলি ছাড়াই কুশলিকে সুন্দর URL এ পুনর্নির্দেশ করুন , পুনর্নির্বাচিত করুন

  • নিদর্শন স্থান
    /this+that+

    এটি ব্রাউজারের ঠিকানা বারগুলিতে খুব সুন্দর নয় , তবে আপনি ইউআরএলগুলিতে স্পেস ব্যবহার করতে পারেন। পুনর্লিখনের নিদর্শনগুলির জন্য ব্যাকস্ল্যাশ-পলায়ন \␣স্থানগুলি ব্যবহার করুন । অন্য মাত্র "পুরো প্যাটার্ন বা প্রতিকল্পন -quote:

     RewriteRule  "^this [\w ]+/(.*)$"  "index.php?id=$1"  [L]
    

    ক্লায়েন্টরা ফাঁকা স্থানের সাথে +বা ইউআরএলগুলিকে সিরিয়ালাইজ করে %20। তবুও পুনর্লিখনগুলিতে তাদের সমস্ত আপেক্ষিক পাথ বিভাগগুলির জন্য আক্ষরিক অক্ষর দ্বারা ব্যাখ্যা করা হয়।

ঘন ঘন নকল:

প্রচলিত .htaccessক্ষতি

এবার এটি একটি নুনের দানার সাথে নিন। প্রতিটি পরামর্শ সকল প্রসঙ্গেই সাধারণীকরণ করা যায় না। এটি সুপরিচিত এবং কয়েকটি অকাট্য হোঁচট খাওয়ার কেবল একটি সাধারণ সংক্ষিপ্তসার:

  • সক্ষম করুন mod_rewriteএবং.htaccess

    প্রতি ডিরেক্টরি কনফিগারেশন ফাইলগুলিতে প্রকৃতপক্ষে RewritRules ব্যবহার করতে আপনাকে অবশ্যই:

    • আপনার সার্ভার AllowOverride Allসক্ষম করেছে কিনা তা পরীক্ষা করুন । অন্যথায় আপনার প্রতি ডিরেক্টরি .htaccessনির্দেশাবলী উপেক্ষা করা হবে, এবং RewritRules কাজ করবে না।

    • একথাও ঠিক যে আছে mod_rewriteসক্রিয় আপনার httpd.confমডিউল অধ্যায়।

    • স্থির সাথে নিয়মের প্রতিটি তালিকা প্রস্তুত করুন RewriteEngine On। যদিও Mod_rewrite স্পষ্টভাবে সক্রিয় <VirtualHost>এবং <Directory>বিভাগে, প্রতি ডিরেক্টরি .htaccessফাইলগুলির পৃথকভাবে তলব করা প্রয়োজন।

  • শীর্ষস্থানীয় স্ল্যাশ ^/মেলে না

    আপনার .htaccessপুনর্লিখনের নিয়মনীতিটি ^/সাধারণত দিয়ে শুরু করা উচিত নয় :

     RewriteRule ^/article/\d+$  …
                  ↑
    

    এটি প্রায়শই পুরানো টিউটোরিয়ালে দেখা যায়। এবং এটি প্রাচীন অ্যাপাচি ১.x সংস্করণগুলির জন্য সঠিক ছিল। আজকাল অনুরোধ পাথ সুবিধামত হয় সম্পূর্ণরূপে ডিরেক্টরি-আপেক্ষিক মধ্যে .htaccessRewriteRules। শুধু নেতৃস্থানীয় /আউট ছেড়ে ।

    · নোট করুন যে শীর্ষস্থানীয় স্ল্যাশ <VirtualHost>যদিও বিভাগগুলিতে এখনও সঠিক । যে কারণে আপনি প্রায়শই এটি ^/?নিয়ম সমতার জন্য alচ্ছিকভাবে দেখেন ।
    · বা কোনও ব্যবহার করার সময় RewriteCond %{REQUEST_URI}আপনি এখনও কোনও শীর্ষস্থানীয়ের সাথে মেলে /Web ওয়েবমাস্টারও
    দেখুন SEএসই: মোড_উইরাইট নিদর্শনগুলিতে অগ্রণী স্ল্যাশ (/) কখন প্রয়োজন হয়?

  • <IfModule *> মোড়কে বেগুন!

    আপনি সম্ভবত এটি অনেক উদাহরণে দেখেছেন:

    <IfModule mod_rewrite.c>
       Rewrite… 
    </IfModule>
    
    • এটা তোলে করেন এ জানার জন্য <VirtualHost>বিভাগে - যদি এটা যেমন ScriptAliasMatch যেমন অন্য ফলব্যাক বিকল্প, সঙ্গে মিলিত হয়। (তবে কেউ কখনও তা করে না)।
    • এবং এটি সাধারণত .htaccessঅনেকগুলি ওপেন সোর্স প্রকল্পের সাথে ডিফল্ট রুলসেটের জন্য বিতরণ করা হয় । সেখানে এটি কেবল ফ্যালব্যাক হিসাবে বোঝানো হয়েছে এবং "কুরুচিপূর্ণ" ইউআরএলগুলি ডিফল্ট হিসাবে কাজ করে।

    তবে আপনি এটি সাধারণত নিজের ফাইলগুলিতে চান না.htaccess

    • প্রথমত, মোড_উইরাইট এলোমেলোভাবে ছিন্ন করা হয় না। (যদি এটি হয় তবে আপনার আরও বড় সমস্যা হবে)।
    • যদি এটি সত্যই অক্ষম হয়ে থাকে তবে আপনার RewritRules এখনও কোনওভাবে কাজ করবে না।
    • এর অর্থ হ'ল এইচটিটিপি 500ত্রুটি রোধ করা । এটি সাধারনত যা সম্পাদন করে তা হ'ল আপনার ব্যবহারকারীদের 404পরিবর্তে এইচটিটিপি ত্রুটিগুলি নিয়ে। ( আপনি যদি এটি সম্পর্কে ভাবেন তবে এত বেশি ব্যবহারকারী-বান্ধব নয়))
    • ব্যবহারিকভাবে এটি আরও কার্যকর লগ এন্ট্রি, বা সার্ভার নোটিফিকেশন মেলগুলি দমন করে। আপনার পুনর্লিখনের নিয়মগুলি কেন কাজ করে না সে সম্পর্কে আপনি কেউই বুদ্ধিমান হতে চাইবেন না।

    সাধারণীকৃত সুরক্ষাকারী হিসাবে প্রলোভনজনক বলে মনে হয় যা প্রায়শই অনুশীলনে বাধা হয়ে দাঁড়ায়।

  • RewriteBaseপ্রয়োজন না হলে ব্যবহার করবেন না

    অনেকগুলি অনুলিপি + পেস্ট উদাহরণগুলিতে একটি RewriteBase /নির্দেশ থাকে। যা যাইহোক অন্তর্ভুক্ত ডিফল্ট হিসাবে ঘটে happens সুতরাং আপনার আসলে এটির দরকার নেই। এটি অভিনব ভার্চুয়ালহোস্ট পুনর্লিখনের স্কিমগুলির জন্য কার্যকর এবং কিছু ভাগ করে নেওয়া হোস্টের জন্য DOCUMENT_ROOT পাথকে ভুলভাবে চিহ্নিত করে।

    গভীরতর সাব-ডাইরেক্টরিগুলিতে পৃথক ওয়েব অ্যাপ্লিকেশনগুলির সাথে এটি ব্যবহার করা বোধগম্য। এটি যেমন ক্ষেত্রে RewritRule নিদর্শন সংক্ষিপ্ত করতে পারে। সাধারণত প্রতি ডিরেক্টরি বিধি সেটগুলিতে আপেক্ষিক পাথ স্পেসিফায়ারদের পছন্দ করা ভাল।

    .Wtaccess এ কীভাবে রাইরাইটবেস কাজ করে তা দেখুন

  • MultiViewsভার্চুয়াল পাথগুলি ওভারল্যাপ হলে অক্ষম করুন

    ইউআরএল পুনর্লিখনটি প্রাথমিকভাবে ভার্চুয়াল আগমনকারী পথগুলিকে সমর্থন করার জন্য ব্যবহৃত হয় । সাধারণভাবে আপনি শুধু একটা ডেস্প্যাচার স্ক্রিপ্ট (আছে index.php) বা কয়েক পৃথক হ্যান্ডেলার ( articles.php, blog.php, wiki.php, ...)। পরেরটি একই ধরণের ভার্চুয়াল পুনরায় লেখার পাথের সাথে সংঘর্ষ হতে পারে

    /article/123উদাহরণস্বরূপ একটি অনুরোধ article.phpএকটি /123PATH_INFO দিয়ে স্পষ্টভাবে মানচিত্র করতে পারে । আপনার নিয়মগুলি তখন সাধারণ জায়গা RewriteCond !-f+ এর সাথে রক্ষা করতে হবে !-d, এবং / অথবা পাঠ্যপথ সমর্থনের অক্ষম করতে হবে বা কেবল অক্ষম করতে হবে Options -MultiViews

    কোনটি বলবেন না আপনি সবসময় আছে । সামগ্রী-আলোচনাটি ভার্চুয়াল সংস্থানগুলিতে কেবল একটি স্বয়ংক্রিয়তা।

  • অর্ডার গুরুত্বপূর্ণ

    আপনি যদি ইতিমধ্যে না থাকেন তবে মোড_আরাইটের বিষয়ে আপনি যা জানতে চেয়েছিলেন তা দেখুন । একাধিক RewritRules একত্রিত করার ফলে প্রায়শই মিথস্ক্রিয়ায় বাড়ে। এটি প্রতি [L]পতাকা অভ্যাসগতভাবে প্রতিরোধ করার মতো কিছু নয় , তবে আপনি একবারে দক্ষ হয়ে উঠবেন এমন একটি স্কিম। আপনি করতে পারেন পুনরায় পুনরায় পুনরায় লেখার এক শাসন থেকে ভার্চুয়াল পাথ অন্য, যতক্ষণ না এটি প্রকৃত লক্ষ্য হ্যান্ডলার ছুঁয়েছে।

    তবুও আপনি প্রায়শই প্রাথমিক নিয়মে সুনির্দিষ্ট বিধিগুলি (স্থির স্ট্রিং /forum/…প্যাটার্নগুলি বা আরও সীমাবদ্ধ স্থানধারক [^/.]+) পেতে চান । জেনেরিক গবগব করে খাওয়া-সব নিয়ম ( ) ভাল বামে হয় পরে বেশী। (একটি ব্যতিক্রম প্রাথমিক ব্লক হিসাবে প্রহরী)).*RewriteCond -f/-d

  • স্টাইলশিট এবং চিত্রগুলি কাজ করা বন্ধ করে দেয়

    আপনি যখন ভার্চুয়াল ডিরেক্টরি স্ট্রাকচারগুলি প্রবর্তন /blog/article/123করেন এটি এইচটিএমএলে (যেমন <img src=mouse.png>) সম্পর্কিত উত্সের রেফারেন্সকে প্রভাবিত করে । যার মাধ্যমে সমাধান করা যেতে পারে:

    • কেবল সার্ভার-পরম রেফারেন্স href="https://stackoverflow.com/old.html"বা ব্যবহার করেsrc="/logo.png"
    • প্রায়শই কেবল <base href="https://stackoverflow.com/index">আপনার এইচটিএমএল <head>বিভাগে যুক্ত করে। এটি স্পষ্টতই আপেক্ষিক রেফারেন্সগুলিকে পূর্বে যা ছিল তা প্রত্যাখ্যান করে।

    আপনি বিকল্পভাবে পুনরায় সংশোধন করতে .cssবা .pngতাদের মূল অবস্থানগুলিতে পাথের জন্য আরও RewritRules নৈপুণ্য তৈরি করতে পারেন । তবে এটি উভয়ই অপ্রয়োজনীয়, বা অতিরিক্ত পুনর্নির্দেশ এবং ক্যাশে ব্যাহত করে।

    আরও দেখুন: সিএসএস, জেএস এবং চিত্রগুলি সুন্দর ইউআরএল দিয়ে প্রদর্শন করে না

  • রিউরাইটকান্ডস কেবল একটি রাইরাইটরুলকে মাস্ক করে

    একটি সাধারণ ভুল অপসারণ হ'ল একটি রাইরাইটকন্ড একাধিক পুনরায় লেখকগুলিকে অবরুদ্ধ করে (কারণ সেগুলি দৃশ্যত এক সাথে সাজানো হয়েছে):

     RewriteCond %{SERVER_NAME} localhost
     RewriteRule ^secret  admin/tools.php
     RewriteRule ^hidden  sqladmin.cgi
    

    যা এটি ডিফল্টরূপে হয় না। আপনি পতাকা ব্যবহার করে তাদের চেইন করতে পারেন [S=2]। অন্যথায় আপনি তাদের পুনরাবৃত্তি করতে হবে। যদিও কখনও কখনও আপনি পুনরায় লেখার প্রক্রিয়াকরণের প্রথমদিকে ["বিপরীত" প্রাথমিক নিয়ম [END] এ নৈপুণ্য তৈরি করতে পারেন।

  • রাইরাইটরুলস থেকে QUERY_STRING ছাড়

    আপনি মেলাতে পারবেন না RewriteRule index.php\?x=y, কারণ মোড_আরউইর্ট কেবলমাত্র ডিফল্টর তুলনায় পাথের তুলনায় তুলনা করে। আপনি এগুলির মাধ্যমে পৃথকভাবে মেলে নিতে পারেন:

     RewriteCond %{QUERY_STRING} \b(?:param)=([^&]+)(?:&|$)
     RewriteRule ^add/(.+)$  add/%1/$1  # ←──﹪₁──┘
    

    আরও দেখুন কীভাবে আমি মোড_উইরাইটের সাথে ক্যোয়ারী স্ট্রিং ভেরিয়েবলগুলি মেলাতে পারি?

  • .htaccess বনাম <VirtualHost>

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

    এই ক্ষেত্রে, ^/?optionচ্ছিক ডিরেক্টরি ডিরেক্টরি বিভাজক উপসর্গ পছন্দ। এটি পেরেডির এবং সার্ভার কনফিগারেশন ফাইলগুলির মধ্যে অবাধে পুনরায় লেখকগুলিকে সরাতে দেয়।

  • যখনই কিছু কাজ করে না

    হতাশ না।

    • তুলনা access.logএবংerror.log

      প্রায়শই আপনি বুঝতে পারবেন যে কোনও রাইরাইটরুল কীভাবে আপনার error.logএবং এর দিকে তাকানো থেকে দুর্ব্যবহার করে access.log। মূলত কোন অনুরোধের পথটি এসেছে এবং কোন পাথ / ফাইল অ্যাপাচি (404/500 ত্রুটি) এর সমাধান করতে পারেনি তা দেখার জন্য অ্যাক্সেসের সময় সম্পর্কিত করুন।

      এটি আপনাকে জানায় না যে কোন রাইরাইটরুল অপরাধী। তবে অ্যাক্সেস অ্যাক্সেসযোগ্য চূড়ান্ত পাথগুলি /docroot/21-.itle?index.phpযেখানে আরও পরিদর্শন করতে পারে তা দিতে পারে। অন্যথায় কিছু অনুমানযোগ্য পাথ না পাওয়া পর্যন্ত নিয়মগুলি অক্ষম করুন।

    • রিরাইটলগ সক্ষম করুন

      দেখুন এ্যাপাচি RewriteLog ডক্স। ডিবাগিংয়ের জন্য আপনি এটি ভোস্ট বিভাগগুলিতে সক্ষম করতে পারবেন:

      # Apache 2.2
      RewriteLogLevel 5
      RewriteLog /tmp/rewrite.log
      
      # Apache 2.4
      LogLevel alert rewrite:trace5
      #ErrorLog /tmp/rewrite.log
      

      এটি প্রতিটি বিধি দ্বারা কীভাবে আগত অনুরোধ পাথগুলি সংশোধিত হয় তার বিশদ সংক্ষিপ্তসার দেয়:

      [..] applying pattern '^test_.*$' to uri 'index.php'
      [..] strip per-dir prefix: /srv/www/vhosts/hc-profi/index.php -> index.php
      [..] applying pattern '^index\.php$' to uri 'index.php'
      

      যা অত্যধিক জেনেরিক নিয়ম এবং দুর্ঘটনাগুলি পুনরায় সংকুচিত করতে সহায়তা করে।

      আরও দেখুন:
      · .htaccess কাজ করছে না (mod_rewrite)
      · .htaccess লেখা নিয়ম ডিবাগ করার জন্য টিপস

    • আপনার নিজের প্রশ্ন জিজ্ঞাসার আগে

      আপনি জানেন যে, স্ট্যাক ওভারফ্লো মোড_উইরাইটে প্রশ্ন জিজ্ঞাসার জন্য খুব উপযুক্ত। এগুলি অন-টপিক করুন পূর্ব গবেষণা এবং প্রচেষ্টা (অপ্রয়োজনীয় উত্তর এড়ান) অন্তর্ভুক্ত , মৌলিক প্রদর্শন করুন বোঝার এবং:

      • ইনপুট ইউআরএলগুলির সম্পূর্ণ উদাহরণ অন্তর্ভুক্ত করুন, সঠিকভাবে পুনরায় লিখিত লক্ষ্যগুলি, আপনার আসল ডিরেক্টরি কাঠামো।
      • সম্পূর্ণ RewriteRule সেট, কিন্তু এছাড়াও আউট সম্ভাব্য ত্রুটিপূর্ণ একটি একক।
      • অ্যাপাচি এবং পিএইচপি সংস্করণ, ওএস টাইপ, ফাইল সিস্টেম, DOCUMENT_ROOT, এবং পিএইচপি $_SERVERপরিবেশগুলি যদি এটি কোনও প্যারামিটারের সাথে মেলে না।
      • আপনার থেকে একটি অংশ access.logএবং error.logবিদ্যমান নিয়মগুলি কী সমাধান করেছে তা যাচাই করতে। আরও ভাল, একটি rewrite.logসারসংক্ষেপ।

      এই জালগুলি দ্রুত এবং আরও সঠিক উত্তর দেয় এবং এগুলি অন্যের কাছে আরও দরকারী করে তোলে।

  • আপনার মন্তব্য .htaccess

    যদি আপনি কোথাও থেকে উদাহরণগুলি অনুলিপি করেন তবে এটিকে অন্তর্ভুক্ত করার জন্য যত্ন নিন # comment and origin link। যদিও এটি বিশিষ্টতা বাদ দিতে কেবল খারাপ আচরণ করে, এটি প্রায়শই পরে রক্ষণাবেক্ষণকে ব্যথা করে। কোনও কোড বা টিউটোরিয়াল উত্স নথি। বিশেষত বিপরীত অবস্থায় আপনার যাদু ব্ল্যাকবক্সগুলির মতো আচরণ না করার ক্ষেত্রে আরও বেশি আগ্রহী হওয়া উচিত।

  • এটি "এসইও" -র URL নয়

    দাবি অস্বীকার: কেবলমাত্র একটি পোষা প্রুভ। আপনি প্রায়শই বেশ কয়েকটি ইউআরএল পুনর্লিখনের স্কিমগুলি "এসইও" লিঙ্ক বা অন্য কিছু হিসাবে উল্লেখ করেন hear যদিও এটি গুগলিং উদাহরণগুলির জন্য দরকারী, এটি একটি তারিখের মিসকনোমার।

    আধুনিক সার্চ ইঞ্জিন কোনটিই সত্যিই বিরক্ত করছে .htmlএবং .phpএ পথ অংশ, অথবা ?id=123যে বিষয়টি জন্য কোয়েরি স্ট্রিং। যেমন অল্টাভিস্টা পুরনো এর সার্চ ইঞ্জিনসমূহ, করেনি সম্ভাব্য ambigious এক্সেস পাথ ওয়েবসাইটের হামাগুড়ি দিয়া এড়িয়ে চলুন। আধুনিক ক্রোলাররা প্রায়শই গভীর ওয়েব সংস্থার জন্যও আগ্রহী হয়।

    ধারণাগতভাবে "সুন্দর" ইউআরএলগুলি কী ব্যবহার করা উচিত তা হ'ল ওয়েবসাইটগুলি ব্যবহারকারী বান্ধব করে তোলে ।

    1. পঠনযোগ্য এবং সুস্পষ্ট সংস্থান প্রকল্প রয়েছে।
    2. সুনিশ্চিত URL গুলি দীর্ঘস্থায়ী হয় (ওরফে পার্মালিনক্স )।
    3. মাধ্যমে আবিষ্কারযোগ্যতা প্রদান /common/tree/nesting

    তবে আনুগত্যের জন্য অনন্য প্রয়োজনীয়তা ত্যাগ করবেন না।

সরঞ্জামসমূহ

বেশিরভাগ জিইটি-প্যারামিটারিশ ইউআরএলগুলির জন্য রাইরাইটরুলগুলি তৈরি করতে বিভিন্ন অনলাইন সরঞ্জাম রয়েছে:

বেশিরভাগই কেবল [^/]+জেনেরিক স্থানধারীদের আউটপুট দেয় তবে তুচ্ছ সাইটগুলির পক্ষে এটি যথেষ্ট।


এখনও কিছুটা পুনর্লিখনের প্রয়োজন, আরও লিঙ্কগুলি এবং অনেকগুলি সাব-শিরোনামই কিছুটা দুর্বল। এখানে অন্যান্য উত্তরগুলির সাথে কিছুটা ওভারল্যাপ রয়েছে, তাই সম্ভবত এটি কেটে ফেলা যায়। এটি মূলত যদিও ভিজ্যুয়াল উদাহরণগুলি সম্পর্কে, এবং সাধারণ গোটচেগুলির তালিকা।
মারিও

3
কোনও উত্তরের এমন সৌন্দর্য এতদিন দেখেনি! আমি পড়তে পড়তে আমার চোখ জ্বলছে। দয়া করে এই জাতীয় উত্তর পোস্ট করা বন্ধ করবেন না :)
Rizier123

1
দুর্দান্ত পোস্ট। আমাকে খুব দ্রুত মোড_উইরাইটের প্রাথমিক ধারণাগুলি বোঝায়!
ব্রীজ

6

Mod_rewrite এর বিকল্প ternative

RewritRules ব্যবহার না করে অনেকগুলি বেসিক ভার্চুয়াল ইউআরএল স্কিম অর্জন করা যায়। অ্যাপাচি পিএইচপি স্ক্রিপ্টগুলিকে .phpএক্সটেনশন ছাড়াই এবং ভার্চুয়াল PATH_INFOআর্গুমেন্টের সাথে চালিত হতে দেয় ।

  1. PATH_INFO , লুক ব্যবহার করুন

    আজকাল AcceptPathInfo Onপ্রায়শই ডিফল্টরূপে সক্ষম হয়। যা মূলত .phpএবং অন্যান্য সংস্থান URL গুলিকে ভার্চুয়াল আর্গুমেন্ট বহন করতে দেয় :

    http://example.com/script.php/virtual/path
    

    এখন এটি /virtual/pathপিএইচপি-তে প্রদর্শিত হবে $_SERVER["PATH_INFO"]যেখানে আপনি পছন্দমতো কোনও অতিরিক্ত যুক্তি পরিচালনা করতে পারবেন।

    এই মধ্যে এ্যাপাচি পৃথক ইনপুট পথ অংশ থাকার মত সুবিধাজনক নয় $1, $2, $3এবং তাদের স্বতন্ত্র হিসাবে ক্ষণস্থায়ী $_GETপিএইচপি ভেরিয়েবল। এটি কম কনফিগারেশনের প্রচেষ্টা দিয়ে কেবল "সুন্দর URL" নকল করছে।

  2. এক্সটেনশনটি লুকানোর জন্য মাল্টিভিউগুলি সক্ষম করুন.php

    .phpইউআরএলগুলিতে "ফাইল এক্সটেনশানগুলি" রোধ করার সহজ বিকল্পটি সক্ষম করছে:

    Options +MultiViews
    

    এর সাথে অ্যাচিচি article.phpএইচটিটিপি অনুরোধের জন্য /articleমেলানো বেসনামটির কারণে নির্বাচন করেছে । এবং এটি পূর্বোক্ত PATH_INFO বৈশিষ্ট্যের সাথে একসাথে ভালভাবে কাজ করে। সুতরাং আপনি ঠিক মত ইউআরএল ব্যবহার করতে পারেন http://example.com/article/virtual/title। আপনার যদি একাধিক পিএইচপি আমন্ত্রণ পয়েন্ট / স্ক্রিপ্ট সহ traditionalতিহ্যবাহী ওয়েব অ্যাপ্লিকেশন থাকে তবে তা বোঝা যায়।

    নোট করুন যে মাল্টিভিউজের আলাদা / বিস্তৃত উদ্দেশ্য রয়েছে। এটি একটি খুব সামান্য পারফরম্যান্স জরিমানা জড়িত, কারণ আপাচি সর্বদা মিলে যাওয়া বেসনামগুলির সাথে অন্য ফাইলগুলির সন্ধান করে। এটা আসলে সেসব বিষয়বস্তু-আলোচনার মাধ্যমে স্থির করা , তাই ব্রাউজার (যেমন উপলব্ধ রিসোর্স মধ্যে ভাল বিকল্প পাবেন article.en.php, article.fr.php, article.jp.mp4)।

  3. এক্সটেনশনহীন .phpস্ক্রিপ্টগুলির জন্য সেটটাইপ বা সেটহ্যান্ডলার

    .phpইউআরএলগুলিতে প্রত্যয়গুলি নিয়ে যাওয়া এড়াতে আরও নির্দেশিত পন্থাটি অন্যান্য ফাইল স্কিমগুলির জন্য পিএইচপি হ্যান্ডলারটি কনফিগার করছে । সবচেয়ে সহজ বিকল্পটি এর মাধ্যমে ডিফল্ট এমআইএমআই / হ্যান্ডলার প্রকারটিকে ওভাররাইড করছে .htaccess:

    DefaultType application/x-httpd-php
    

    এইভাবে আপনি কেবল নিজের article.phpস্ক্রিপ্টটির নাম পরিবর্তন করতে পারবেন article(বিনা ব্যতীত), তবে এখনও এটি পিএইচপি স্ক্রিপ্ট হিসাবে প্রক্রিয়া করেছেন।

    এখন এতে কিছু সুরক্ষা এবং পারফরম্যান্সের প্রভাব থাকতে পারে, কারণ সমস্ত এক্সটেনশনহীন ফাইলগুলি এখন পিএইচপি এর মাধ্যমে পাইপ করা হবে। অতএব আপনি ব্যক্তিগতভাবে কেবল পৃথক ফাইলের জন্য এই আচরণটি সেট করতে পারেন:

    <Files article>
      SetHandler application/x-httpd-php
      # or SetType 
    </Files>
    

    এটি আপনার সার্ভার সেটআপ এবং ব্যবহৃত পিএইচপি এসপিআই এর উপর কিছুটা নির্ভরশীল। সাধারণ বিকল্প অন্তর্ভুক্ত ForceType application/x-httpd-phpবা AddHandler php5-script

    আবার নোট করুন যে এই ধরনের সেটিংস এক .htaccessথেকে সাবফোল্ডারে প্রচার করে ate স্থির সংস্থানসমূহের জন্য আপনার সর্বদা স্ক্রিপ্ট এক্সিকিউশন ( SetHandler Noneএবং Options -Execবা php_flag engine off) অক্ষম করা উচিত , এবং আপলোড / ডিরেক্টরি ইত্যাদি should

  4. অন্যান্য অ্যাপাচি পুনর্লিখনের স্কিম

    এর অনেকগুলি বিকল্পের মধ্যে অ্যাপাচি mod_aliasবৈশিষ্ট্যগুলি সরবরাহ করে - যা কখনও কখনও ঠিক একইভাবে পুনরায় mod_rewriteলেখার কাজ করে work লক্ষ্য করুন যে এগুলির বেশিরভাগ অবশ্যই একটি <VirtualHost>বিভাগে সেট আপ করতে হবে , প্রতি ডিরেক্টরি .htaccessকনফিগারেশন ফাইলগুলিতে নয়।

    • ScriptAliasMatchমূলত সিজিআই স্ক্রিপ্টগুলির জন্য, তবে পিএইচপি-র জন্যও কাজ করা উচিত। এটি ঠিক যেকোনটির মতোই রিজেক্সসকে অনুমতি দেয় RewriteRule। প্রকৃতপক্ষে ক্যাচ-অল ফ্রন্ট কন্ট্রোলারকে কনফিগার করার পক্ষে এটি সম্ভবত সবচেয়ে শক্তিশালী বিকল্প।

    • এবং একটি সরল Aliasকিছু সহজ পুনর্লিখনের স্কিমগুলির পাশাপাশি সহায়তা করে।

    • এমনকি কোনও ErrorDocumentপিএইচপি স্ক্রিপ্টকে ভার্চুয়াল পাথগুলি পরিচালনা করতে দেবার জন্য একটি সরল নির্দেশিকা ব্যবহার করা যেতে পারে। মনে রাখবেন যে এটি একটি ক্লডজি কাজের মতো, জেট অনুরোধ ব্যতীত অন্য কিছু নিষিদ্ধ করেছে এবং সংজ্ঞা দ্বারা ত্রুটি বর্ষণ করে।

    আরও টিপসের জন্য http://httpd.apache.org/docs/2.2/urlmapping.html দেখুন ।

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