mod_rewrite সিনট্যাক্স ক্রম
মোড_উইরাইটের কিছু নির্দিষ্ট ক্রমবিধি রয়েছে যা প্রক্রিয়াজাতকরণকে প্রভাবিত করে। কিছু সম্পন্ন হওয়ার আগে, RewriteEngine On
নির্দেশটি দেওয়া দরকার কারণ এটি মোড_প্রিট প্রক্রিয়াকরণটি চালু করে। এটি অন্য কোনও পুনর্লিখনের নির্দেশাবলীর আগে হওয়া উচিত।
RewriteCond
পূর্ববর্তীটি RewriteRule
শর্তসাপেক্ষে সেই এক নিয়মকে সাবজেক্ট করে। নিম্নলিখিত যে কোনও RewritRules প্রক্রিয়া করা হবে যেন তারা শর্ত সাপেক্ষে ছিল না।
RewriteEngine On
RewriteCond %{HTTP_REFERER} ^https?://serverfault\.com(/|$)
RewriteRule $/blog/(.*)\.html $/blog/$1.sf.html
এই সাধারণ ক্ষেত্রে, যদি এইচটিটিপি রেফারার সার্ভারফল্ট ডট কম থেকে থাকে, তবে ব্লগের অনুরোধগুলি বিশেষ সার্ভারফ্রোল্ট পৃষ্ঠাগুলিতে পুনর্নির্দেশ করুন (আমরা কেবল এটি বিশেষ। তবে উপরের ব্লকে যদি অতিরিক্ত পুনরায় লেখার লাইন থাকে:
RewriteEngine On
RewriteCond %{HTTP_REFERER} ^https?://serverfault\.com(/|$)
RewriteRule $/blog/(.*)\.html $/blog/$1.sf.html
RewriteRule $/blog/(.*)\.jpg $/blog/$1.sf.jpg
সমস্ত .jpg ফাইলগুলি বিশেষ সার্ভারফল্ট পৃষ্ঠাগুলিতে যাবে, কেবল এখানে রেফার করে এমন ইঙ্গিত দেয় না। এই বিধিগুলি কীভাবে লিখিত হয় এটি স্পষ্টভাবে উদ্দেশ্য নয়। এটি একাধিক RewriteCond বিধি দ্বারা করা যেতে পারে:
RewriteEngine On
RewriteCond %{HTTP_REFERER} ^https?://serverfault\.com(/|$)
RewriteRule ^/blog/(.*)\.html /blog/$1.sf.html
RewriteCond %{HTTP_REFERER} ^https?://serverfault\.com(/|$)
RewriteRule ^/blog/(.*)\.jpg /blog/$1.sf.jpg
তবে সম্ভবত কিছু ট্রিকিয়ার রিপ্লেসমেন্ট সিনট্যাক্স দিয়ে করা উচিত।
RewriteEngine On
RewriteCond %{HTTP_REFERER} ^https?://serverfault\.com(/|$)
RewriteRule ^/blog/(.*)\.(html|jpg) /blog/$1.sf.$2
আরও জটিল RewritRule প্রক্রিয়াকরণের শর্তাদি রয়েছে। শেষ প্যারেন্টিথিকাল, (html|jpg)
রাইরাইটরুলকে দুটি html
বা একটির jpg
সাথে মিলে যায় এবং পুনরায় লেখার স্ট্রিংয়ে ম্যাচিং স্ট্রিংটিকে $ 2 হিসাবে উপস্থাপন করতে বলে। এটি যুক্তিসঙ্গতভাবে আগের ব্লকের সাথে সমান, যেখানে দুটি রিরাইটকন্ড / রাইরাইটরুল জুটি রয়েছে, এটি কেবল চারটির পরিবর্তে দুটি লাইনে এটি করে।
একাধিক রিরাইটকন্ড লাইন সুস্পষ্টভাবে ANDed হয় এবং স্পষ্টভাবে ORed করা যায়। সার্ভারফল্ট এবং সুপার ব্যবহারকারী উভয় থেকেই রেফারারদের পরিচালনা করতে (স্পষ্টভাবে OR):
RewriteEngine On
RewriteCond %{HTTP_REFERER} ^https?://serverfault\.com(/|$) [OR]
RewriteCond %{HTTP_REFERER} ^https?://superuser\.com(/|$)
RewriteRule ^/blog/(.*)\.(html|jpg) /blog/$1.sf.$2
ক্রোম ব্রাউজারগুলির সাথে সার্ভারফল্ট উল্লেখ করা পৃষ্ঠাগুলি পরিবেশন করতে (অন্তর্ভুক্ত এবং):
RewriteEngine On
RewriteCond %{HTTP_REFERER} ^https?://serverfault\.com(/|$)
RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*Chrome.*$
RewriteRule ^/blog/(.*)\.(html|jpg) /blog/$1.sf.$2
RewriteBase
নিম্নোক্ত RewriteRule
নির্দেশাবলী কীভাবে তাদের প্রসেসিং পরিচালনা করে তা সুনির্দিষ্টভাবে অর্ডারও নির্দিষ্ট করে । এটি .htaccess ফাইলগুলিতে খুব দরকারী। যদি এটি ব্যবহার করা হয় তবে এটি একটি .htaccess ফাইলে "রিরাইটইঙ্গাইন অন" এর অধীনে প্রথম নির্দেশিকা হওয়া উচিত। এই উদাহরণটি ধরুন:
RewriteEngine On
RewriteBase /blog
RewriteCond %{HTTP_REFERER} ^https?://serverfault\.com(/|$)
RewriteRule ^(.*)\.(html|jpg) $1.sf.$2
এটি মোড_আরাইটকে বলছে যে বর্তমানে এটি নির্দিষ্ট করা এই নির্দিষ্ট ইউআরএলটি শারীরিক ডিরেক্টরি পাথ (/ home / $ ব্যবহারকারীর নাম / পাবলিক_এইচটিএমএল / ব্লগ) এর পরিবর্তে http://example.com/blog/ এর মাধ্যমে এসেছিল এবং সেই অনুসারে এটি চিকিত্সা করার জন্য এসেছিল । এর কারণে, RewriteRule
ইউআরএল-এ "/ ব্লগ" এর পরে স্ট্রিং-স্টার্টটি বিবেচনা করে। এখানে একই জিনিস দুটি ভিন্নভাবে লেখা হয়। একটিতে রাইরাইটবেস, অন্যটি ছাড়া:
RewriteEngine On
##Example 1: No RewriteBase##
RewriteCond %{HTTP_REFERER} ^https?://serverfault\.com(/|$)
RewriteRule /home/assdr/public_html/blog/(.*)\.(html|jpg) $1.sf.$2
##Example 2: With RewriteBase##
RewriteBase /blog
RewriteCond %{HTTP_REFERER} ^https?://serverfault\.com(/|$)
RewriteRule ^(.*)\.(html|jpg) $1.sf.$2
যেমন আপনি দেখতে পাচ্ছেন, ওয়েব- সার্ভারের চেয়ে কন্টেন্টের RewriteBase
ওয়েব- সাইটের পথটি লিভারেজ করার নিয়মগুলিকে পুনর্লিখনের অনুমতি দেয় , যা এই জাতীয় ফাইলগুলি সম্পাদনা করার ক্ষেত্রে তাদের আরও বোধগম্য করে তুলতে পারে। এছাড়াও, তারা নির্দেশকে আরও ছোট করতে পারে, যার একটি নান্দনিক আবেদন রয়েছে।
RewritRule ম্যাচিং সিনট্যাক্স
RewritRule নিজেই ম্যাচের স্ট্রিংগুলির জন্য একটি জটিল বাক্য গঠন রয়েছে। আমি অন্য বিভাগে পতাকাগুলি ([পিটি] এর মতো জিনিস) কভার করব। কারণ সিসাদমিনরা ম্যান-পেজ পড়ার চেয়ে উদাহরণস্বরূপ আরও প্রায়ই শিখেন আমি উদাহরণ দেব এবং তারা কী করবে তা ব্যাখ্যা করব।
RewriteRule ^/blog/(.*)$ /newblog/$1
.*
কনস্ট্রাক্ট কোনো একক অক্ষর মিলে যায় ( .
) শূন্য বা তার বেশি বার ( *
)। প্রথম বন্ধনীতে এটি বন্ধ করে দেওয়া স্ট্রিংটি সরবরাহ করতে বলে যা was 1 ভেরিয়েবল হিসাবে মেলে।
RewriteRule ^/blog/.*/(.*)$ /newblog/$1
এই ক্ষেত্রে, প্রথম। * প্যারেন্সে আবদ্ধ ছিল না তাই পুনর্লিখিত স্ট্রিংয়ের জন্য সরবরাহ করা হয়নি। এই নিয়মটি নতুন ব্লগ-সাইটে ডিরেক্টরি স্তরটিকে সরিয়ে দেয়। (/blog/2009/sample.html /newblog/sample.html হয়ে যায়)।
RewriteRule ^/blog/(2008|2009)/(.*)$ /newblog/$2
এই ক্ষেত্রে, প্রথম বন্ধনীরূপের এক্সপ্রেশন একটি মিলে যাওয়া গ্রুপ সেট আপ করে। এটি $ 1 হয়ে যায়, যা প্রয়োজন হয় না এবং তাই পুনর্লিখিত স্ট্রিংয়ে ব্যবহৃত হয় না।
RewriteRule ^/blog/(2008|2009)/(.*)$ /newblog/$1/$2
এই ক্ষেত্রে, আমরা পুনর্লিখিত স্ট্রিংয়ে $ 1 ব্যবহার করি।
RewriteRule ^/blog/(20[0-9][0-9])/(.*)$ /newblog/$1/$2
এই নিয়মে একটি বিশেষ বন্ধনী বাক্য গঠন ব্যবহার করা হয়েছে যা একটি চরিত্রের সীমা নির্দিষ্ট করে । [0-9] 0 থেকে 9 পর্যন্ত সংখ্যার সাথে মেলে এই নির্দিষ্ট নিয়মটি 2000 থেকে 2099 সাল পর্যন্ত পরিচালনা করবে years
RewriteRule ^/blog/(20[0-9]{2})/(.*)$ /newblog/$1/$2
এটি পূর্ববর্তী নিয়মের মতো একই কাজ করে, তবে {2 it অংশটি এটি পূর্বের চরিত্রের (এই ক্ষেত্রে একটি বন্ধনী প্রকাশের) সাথে দুটি বারের সাথে মেলাতে বলে।
RewriteRule ^/blog/([0-9]{4})/([a-z]*)\.html /newblog/$1/$2.shtml
এই কেসটি দ্বিতীয় মিলের এক্সপ্রেশনটিতে যে কোনও ছোট-অক্ষরের অক্ষরের সাথে মিলবে এবং যতটা অক্ষর পারে তার জন্য এটি করবে। \.
কনস্ট্রাক্ট বলা হয়েছে যে সব প্রকৃত কাল, না বিশেষ অক্ষর এটা পূর্ববর্তী উদাহরণ রয়েছে যেমন সময়ের চিকিত্সা। যদিও ফাইল-নামটিতে ড্যাশ থাকলে তা ভেঙে যাবে।
RewriteRule ^/blog/([0-9]{4})/([-a-z]*)\.html /newblog/$1/$2.shtml
এই ফাঁদে ফাইলগুলির নামগুলি এতে ড্যাশযুক্ত থাকে। যাইহোক, -
বন্ধনী এক্সপ্রেশনগুলির একটি বিশেষ চরিত্র হিসাবে এটি প্রকাশের প্রথম চরিত্র হতে হবে ।
RewriteRule ^/blog/([0-9]{4})/([-0-9a-zA-Z]*)\.html /newblog/$1/$2.shtml
এই সংস্করণটি ফাইলের নাম, অক্ষর বা -
ফাইল-নামের অক্ষরের সাথে কোনও ফাইলের নাম আটকে দেয় । এইভাবে আপনি বন্ধনীর এক্সপ্রেশনতে একাধিক অক্ষর সেট নির্দিষ্ট করেন।
পুনর্লিখন রুল পতাকা
পুনর্লিখনের নিয়মগুলিতে থাকা পতাকাগুলির বেশ কয়েকটি বিশেষ অর্থ এবং ইউজক্যাস রয়েছে ।
RewriteRule ^/blog/([0-9]{4})/([-a-z]*).\html /newblog/$1/$2.shtml [L]
পতাকাটি [L]
উপরের অভিব্যক্তিটির শেষে। একাধিক পতাকা ব্যবহার করা যেতে পারে, একটি কমা দ্বারা পৃথক। লিঙ্কযুক্ত ডকুমেন্টেশন প্রতিটি বর্ণনা করে তবে এখানে সে যাইহোক:
এল = শেষ। এটির সাথে মিলে গেলে পুনরায় লেখার প্রক্রিয়া বন্ধ করুন। অর্ডার গণনা!
সি = চেইন। পরবর্তী পুনর্লিখনের প্রক্রিয়া চালিয়ে যান। যদি এই নিয়মটি মেলে না, তবে পরবর্তী বিধি কার্যকর করা হবে না। এই সম্পর্কে আরও পরে।
ই = পরিবেশগত পরিবর্তনশীল সেট করুন। অ্যাপাচে বিভিন্ন পরিবেশগত ভেরিয়েবল রয়েছে যা ওয়েব-সার্ভারের আচরণকে প্রভাবিত করতে পারে।
চ = নিষিদ্ধ। যদি এই নিয়মটি মেলে তবে একটি 403-নিষিদ্ধ ত্রুটি প্রদান করে।
জি = গেছে এই নিয়মের সাথে মেলে যদি একটি 410-ত্রুটি ফিরে আসে।
এইচ = হ্যান্ডলার অনুরোধটিকে হ'ল এটি নির্দিষ্ট মাইম-টাইপ হিসাবে জোর করে।
এন = পরবর্তী নিয়মটিকে আবার শুরু করতে এবং পুনরায় মিল করতে বাধ্য করে। সাবধান হও! লুপগুলি ফলাফল করতে পারে।
এনসি = কোনও মামলা নেই। অনুমতিjpg
জেপিজি এবং জেপিজি উভয়ই মেলে।
NE = কোন পালাতে হবে না। তাদের হেক্স-কোড সমতুল্যে বিশেষ অক্ষর (?? # এবং ইত্যাদি) এর পুনরায় লেখা রোধ করে।
এনএস = কোনও সাব-কোয়েস্ট নেই। আপনি যদি সার্ভার-সাইড-অন্তর্ভুক্ত ব্যবহার করেন তবে এটি অন্তর্ভুক্ত ফাইলগুলির সাথে ম্যাচগুলি আটকাবে।
পি = প্রক্সি। মোড_প্রক্সি দ্বারা নিয়ম পরিচালনা করতে বাধ্য করে। অন্যান্য সার্ভার থেকে স্বচ্ছভাবে সামগ্রী সরবরাহ করুন, কারণ আপনার ওয়েব-সার্ভার এটি এনেছে এবং এটি পুনরায় পরিবেশন করে। এটি একটি বিপজ্জনক পতাকা, একটি খারাপ লেখা হিসাবে এটি আপনার ওয়েব-সার্ভারকে একটি ওপেন-প্রক্সিতে পরিণত করবে এবং এটি খারাপ।
পিটি = পাস দিয়ে। রাইরাইটরুল ম্যাচিংয়ে অ্যাকাউন্টে উপন্যাসের বিবরণ গ্রহণ করুন।
কিউএসএ = কিউএসএপেন্ড। যখন আসল স্ট্রিংটিতে একটি কোয়েরি থাকে ( http://example.com/thing?asp=foo) পুনরায় লিখিত স্ট্রিংয়ে মূল ক্যোরিয় স্ট্রিং যুক্ত করুন। সাধারণত এটি ফেলে দেওয়া হবে। গতিশীল বিষয়বস্তুর জন্য গুরুত্বপূর্ণ।
আর = পুনর্নির্দেশ। নির্দিষ্ট URL এ একটি HTTP পুনর্নির্দেশ সরবরাহ করুন। যথাযথ পুনর্নির্দেশ কোড সরবরাহ করতে পারে [আর = 303]। এর সাথে খুব মিল RedirectMatch
, যা দ্রুত এবং এটি সম্ভব হলে ব্যবহার করা উচিত।
এস = এড়িয়ে যান। এই নিয়মটি এড়িয়ে যান।
টি = টাইপ। প্রত্যাবর্তিত সামগ্রীর মাইম-প্রকার উল্লেখ করুন। AddType
দিকনির্দেশনার সাথে খুব মিল ।
আপনি কি জানেন যে আমি এটি কীভাবে RewriteCond
একটি এবং কেবলমাত্র একটি নিয়মের জন্য প্রযোজ্য? ভাল, আপনি শৃঙ্খলাবদ্ধ হয়ে এটি কাছাকাছি পেতে পারেন।
RewriteEngine On
RewriteCond %{HTTP_REFERER} ^https?://serverfault\.com(/|$)
RewriteRule ^/blog/(.*)\.html /blog/$1.sf.html [C]
RewriteRule ^/blog/(.*)\.jpg /blog/$1.sf.jpg
যেহেতু প্রথম পুনর্লিখনটিতে চেইন পতাকা রয়েছে, দ্বিতীয় পুনর্লিখন-বিধি কার্যকর হবে যখন প্রথমটি করবে যখন এটি পূর্ববর্তী রাইরাইটকন্ড নিয়মটি মিলে যায়। সহজ যদি আপাচি নিয়মিত-এক্সপ্রেশনগুলি আপনার মস্তিষ্ককে আঘাত করে। তবে, প্রথম বিভাগে আমি যে সমস্ত-ইন-ও-লাইন পদ্ধতিটি দেখছি সেটি অপ্টিমাইজেশনের দিক থেকে দ্রুত।
RewriteRule ^/blog/([0-9]{4})/([-0-9a-zA-Z]*)\.html /newblog/$1/$2.shtml
পতাকাগুলির মাধ্যমে এটিকে আরও সহজ করা যায়:
RewriteRule ^/blog/([0-9]{4})/([-0-9a-z]*)\.html /newblog/$1/$2.shtml [NC]
এছাড়াও, কিছু পতাকাও রাইরাইটকন্ডে প্রয়োগ হয়। উল্লেখযোগ্যভাবে, NoCase।
RewriteCond %{HTTP_REFERER} ^https?://serverfault\.com(/|$) [NC]
"সার্ভারফল্ট.কম" মিলবে