প্রশ্ন পুনঃনির্দেশ, ইউআরএল পরিবর্তন অথবা HTTP পুনঃনির্দেশ আপাচারে HTTPS- আপনি যা কিছু পরিবর্তন করতে চান তা Mod_Rrrite রুলস সম্পর্কে জানতে চান তবে জিজ্ঞাসা করতে ভীত


এটা একটা ক্যানোনিকাল প্রশ্ন Apache এর mod_rewrite সম্পর্কে।

একটি অনুরোধ URL পরিবর্তন করা বা ব্যবহারকারীদের মূলত অনুরোধ করা একটি ভিন্ন URL- এ পুনঃনির্দেশিত করা হয় mod_rewrite ব্যবহার করে। এই যেমন জিনিস অন্তর্ভুক্ত করে:

  • HTTPS এ HTTP পরিবর্তন (অথবা অন্য উপায়টি প্রায়)
  • এমন একটি পৃষ্ঠাতে একটি অনুরোধ পরিবর্তন করা যা নতুন প্রতিস্থাপনে আর বিদ্যমান নেই।
  • একটি URL ফর্ম্যাট সংশোধন করা হচ্ছে (যেমন? Id = 3433 থেকে / id / 3433)
  • চাঁদ এবং সূর্যের আওতায় যে কোনও কিছুতে রেফারারের ভিত্তিতে ব্রাউজারের উপর ভিত্তি করে একটি ভিন্ন পৃষ্ঠা উপস্থাপন করা হচ্ছে।
  • আপনি ইউআরএল প্রায় জগাখিচুড়ি করতে চান কিছু

Mod_Rrrite বিধিগুলি সম্পর্কে আপনি যে সব কিছু জানতে চেয়েছিলেন তা কিন্তু জিজ্ঞাসা করতে ভয় পান!

কিভাবে আমি mod_rewrite নিয়ম লেখার বিশেষজ্ঞ হতে পারি?

  • Mod_rewrite নিয়ম মৌলিক বিন্যাস এবং গঠন কি?
  • নিয়মিত এক্সপ্রেশনগুলির কোন ফর্ম / গন্ধ কি আমার দৃঢ় উপলব্ধি করতে হবে?
  • পুনর্লিখন নিয়ম লেখার সময় সবচেয়ে সাধারণ ভুল / pitfalls কি কি?
  • Mod_rewrite নিয়ম পরীক্ষা এবং যাচাই করার জন্য একটি ভাল পদ্ধতি কি?
  • Mod_rewrite নিয়ম এসইও বা কর্মক্ষমতা প্রভাব আছে কি আমি সচেতন হওয়া উচিত?
  • Mod_rewrite কাজের জন্য সঠিক সরঞ্জামের মতো মনে হতে পারে এমন সাধারণ পরিস্থিতিতে আছে কি না?
  • কিছু সাধারণ উদাহরণ কি কি?

আপনার নিয়ম পরীক্ষা করার জন্য একটি জায়গা

দ্য htaccess পরীক্ষক ওয়েব সাইট আপনার নিয়ম সঙ্গে প্রায় খেলা এবং তাদের পরীক্ষা করার জন্য একটি মহান জায়গা। এটি এমনকি ডিবাগ আউটপুট দেখায় যাতে আপনি দেখতে পারেন কী মিলছে এবং কী না।


257
2017-12-20 16:59


উত্স


এই প্রশ্নটির পিছনে ধারণাটি আমাদের আরও নিয়মিত ব্যবহারকারীদের উন্মাদ করে এমন সমস্ত অনন্ত mod_rewrite প্রশ্নগুলির জন্য একটি ঘনিষ্ঠ পথ দিতে হয়। এই এ subnetting সঙ্গে সম্পন্ন করা কি খুব অনুরূপ serverfault.com/questions/49765/how-does-subnetting-work । - Kyle Brandt♦
এছাড়াও, আমি সত্যিই এই উপর অনেক upsvotes চান না প্রশ্ন, বরং তারা উত্তর যেতে হবে। আমি সিডাব্লুটি করতে চাই না কারণ আমি নিশ্চিত যে পোস্টার আমার যা আশা করছি তার জন্য সম্পূর্ণ ক্রেডিট পায় mod_rewrite সব mod_rewrite প্রশ্ন শেষ উত্তর। - Kyle Brandt♦
দুঃখিত, আমি প্রশ্ন উত্থাপিত। ;-) আমি সত্যিই এটি উপরের (বা কাছাকাছি) এ দেখাতে হবে মনে হয় mod-rewrite ট্যাগ অনুসন্ধান / ফিল্টার। - Steven Monday
অন্য কেউ (টিএম) সাধারণ ব্যবহারের ক্ষেত্রে হ্যান্ডেল করা উচিত। আমি তাদের ন্যায়বিচার করতে যথেষ্ট ভাল জানি না। - sysadmin1138♦
সম্ভবত এই প্রশ্নটিকে আরও ছোট করার জন্য mod-rewrite ট্যাগ উইকিতে লিঙ্ক করা উচিত। - beldaz


উত্তর:


mod_rewrite সিনট্যাক্স আদেশ

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

RewriteCond পূর্ববর্তী RewriteRule যে শর্ত এক শর্ত সাপেক্ষে করে তোলে। যেহেতু তারা শর্তাবলী সাপেক্ষে ছিল না হিসাবে নিম্নলিখিত কোন পুনর্নবীকরণ নিয়ম প্রক্রিয়া করা হবে।

RewriteEngine On
RewriteCond %{HTTP_REFERER}          ^https?://serverfault\.com(/|$)
RewriteRule $/blog/(.*)\.html        $/blog/$1.sf.html

এই সহজ ক্ষেত্রে, যদি HTTP রেফারেন্স serverfault.com থেকে থাকে তবে ব্লগ অনুরোধগুলিকে বিশেষ সার্ভারফুল পৃষ্ঠাগুলিতে পুনঃনির্দেশিত করুন (আমরা কেবল সেই বিশেষ)। যাইহোক, উপরের ব্লকের অতিরিক্ত রিভারাইটরুল লাইন থাকলে:

RewriteEngine On
RewriteCond %{HTTP_REFERER}          ^https?://serverfault\.com(/|$)
RewriteRule $/blog/(.*)\.html        $/blog/$1.sf.html
RewriteRule $/blog/(.*)\.jpg         $/blog/$1.sf.jpg

সমস্ত .jpg ফাইলগুলি বিশেষ সার্ভারফুল পৃষ্ঠাগুলিতে যাবে, রেফারারের সাথে শুধুমাত্র এটিই নয় যে এটি এখানে থেকে এসেছে। এই নিয়মগুলি কীভাবে লিখিত হয় তা স্পষ্টভাবেই নয়। এটি একাধিক রিভারাইটকন্ড নিয়ম দ্বারা সম্পন্ন করা যেতে পারে:

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

কিন্তু সম্ভবত কিছু trickier প্রতিস্থাপন সিনট্যাক্স সঙ্গে সম্পন্ন করা উচিত।

RewriteEngine On
RewriteCond %{HTTP_REFERER}                ^https?://serverfault\.com(/|$)
RewriteRule ^/blog/(.*)\.(html|jpg)        /blog/$1.sf.$2

আরো জটিল পুনরাবৃত্তি রুল প্রক্রিয়াকরণের জন্য শর্তাবলী রয়েছে। শেষ পিতামাতার, (html|jpg) উভয় জন্য মেলে RewriteRule বলে html অথবা jpg, এবং পুনরাবৃত্তি স্ট্রিং মধ্যে মিলিত স্ট্রিং $ 2 হিসাবে প্রতিনিধিত্ব। এটি পূর্ববর্তী ব্লকের যৌক্তিকভাবে একই, দুটি পুনরাবৃত্তি / পুনরুজ্জীবন জোড়া সহ, এটি কেবল চারটি লাইনের পরিবর্তে এটি দুটি লাইনে করে।

একাধিক রিভারাইটকন্ড লাইন নিখুঁতভাবে ANDED, এবং স্পষ্টভাবে ORED করা যেতে পারে। সার্ভারফault এবং সুপার ব্যবহারকারী উভয় থেকে রেফারারগুলি পরিচালনা করার জন্য (স্পষ্ট OR):

RewriteEngine On
RewriteCond %{HTTP_REFERER}                ^https?://serverfault\.com(/|$)    [OR]
RewriteCond %{HTTP_REFERER}                ^https?://superuser\.com(/|$)
RewriteRule ^/blog/(.*)\.(html|jpg)        /blog/$1.sf.$2

Chrome ব্রাউজারগুলির সাথে সার্ভারফault উল্লেখ পৃষ্ঠাগুলি পরিবেশন করতে (অন্তর্নিহিত এবং):

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

এই mod_rewrite বলছে যে এই বিশেষ URL এটি বর্তমানে পরিচালনা করা হয় উপায় দ্বারা আগত http://example.com/blog/ পরিবর্তে শারীরিক ডিরেক্টরি পথ (/ home / $ ব্যবহারকারীর নাম / public_html / ব্লগ) এবং এটি অনুযায়ী আচরণ। এই কারণে, দী RewriteRule URL- এ "/ ব্লগ" এর পরে এটির স্ট্রিং-স্টার্ট বিবেচনা করা হয়। এখানে দুটি জিনিস বিভিন্ন ভাবে লেখা আছে। রিভারাইটের সাথে এক, অন্য ছাড়া:

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 ওয়েব লিভারেজ লিভারেজ পুনরায় লেখার অনুমতি দেয়-সাইট ওয়েবের পরিবর্তে কন্টেন্ট করার পথ।সার্ভার, যা তাদের এই ফাইল সম্পাদনা যারা তাদের আরও বুদ্ধিমান করতে পারেন। এছাড়াও, তারা নির্দেশিকাগুলি ছোট করে তুলতে পারে, যা একটি নান্দনিক আপিল রয়েছে।


পুনরাবৃত্তি রেজুলেশন সিনট্যাক্স

RewriteRule নিজেই মেলা স্ট্রিং জন্য একটি জটিল সিনট্যাক্স আছে। আমি অন্য বিভাগে ফ্ল্যাগগুলি (জিনিসগুলি [পিটি] মত) কভার করব। কারণ Sysadmins উদাহরণ দ্বারা আরো প্রায়ই একটি পড়ার চেয়ে শিখতে মনুষ্যসৃষ্ট পৃষ্ঠা আমি উদাহরণ দেব এবং তারা কি ব্যাখ্যা।

RewriteRule ^/blog/(.*)$    /newblog/$1

দ্য .* গঠন কোন একক অক্ষর মেলে (.) শূন্য বা আরো বার (*)। বন্ধনীতে এটি বন্ধ করা এটি $ 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 থেকে ২099 সাল পর্যন্ত বছর পরিচালনা করবে।

RewriteRule ^/blog/(20[0-9]{2})/(.*)$  /newblog/$1/$2

এটি পূর্ববর্তী নিয়ম হিসাবে একই জিনিস করে, কিন্তু {2} অংশটি পূর্ববর্তী চরিত্র (এই ক্ষেত্রে একটি বন্ধনী অভিব্যক্তি) দুইবার মিলিয়ে বলে।

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-গন ত্রুটি প্রদান করে।
এইচ = হ্যান্ডলার। এটি নির্দিষ্ট MIME- টাইপ হিসাবে হ্যান্ডেল করা অনুরোধ বাধ্য করে।
এন = পরবর্তী। নিয়ম আবার শুরু এবং পুনরায় ম্যাচ বাধ্য করে। সাবধান হও! Loops ফলে হতে পারে।
এনসি = কোন ক্ষেত্রে। অনুমতি jpg জেপিজি এবং জেপিজি উভয় মেলে।
এনই = কোন পালা। বিশেষ অক্ষরের (।? # এবং ইত্যাদি) পুনঃলিখন প্রতিরোধ করে তাদের হেক্স-কোড সমতুল্য।
এখানে ক্লিক করুন = কোন subrequests। আপনি যদি সার্ভার-পার্শ্ব-ব্যবহার করে থাকেন তবে এটি অন্তর্ভুক্ত ফাইলগুলিতে মিলগুলিকে আটকাবে।
পি = প্রক্সি। Mod_proxy দ্বারা নিয়ন্ত্রিত করা নিয়ম বাধ্য করে। স্বচ্ছভাবে অন্যান্য সার্ভার থেকে সামগ্রী সরবরাহ করুন, কারণ আপনার ওয়েব-সার্ভার এটি ফিরিয়ে আনবে এবং এটি পুনরায় পরিষেবা দেবে। এটি একটি বিপজ্জনক পতাকা, কারণ একটি দুর্বল লিখিত ব্যক্তি আপনার ওয়েব-সার্ভারকে একটি খোলা-প্রক্সিতে পরিণত করবে এবং এটি খারাপ।
পিটি = মাধ্যমে পাস। একাউন্টে রিয়াইট্রাইল মিললে অ্যাকাউন্টের বিবৃতি গ্রহণ করুন।
QSA = QSAppend। যখন মূল স্ট্রিং একটি প্রশ্ন থাকে (http://example.com/thing?asp=foo) পুনরায় লেখা স্ট্রিং মূল ক্যোয়ারী স্ট্রিং যোগ করুন। সাধারণত এটি বাতিল করা হবে। গতিশীল কন্টেন্ট জন্য গুরুত্বপূর্ণ।
আর = পুনঃনির্দেশ। নির্দিষ্ট ইউআরএল একটি HTTP পুনঃনির্দেশ প্রদান। সঠিক পুনঃনির্দেশ কোড প্রদান করতে পারেন [আর = 303]। খুব অনুরূপ RedirectMatch, যা দ্রুত এবং সম্ভব যখন ব্যবহার করা উচিত।
এস = এড়িয়ে যান। এই নিয়ম উপেক্ষা করুন।
টি = টাইপ। ফিরে কন্টেন্ট mime টাইপ উল্লেখ করুন। খুব অনুরূপ 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]

এছাড়াও, কিছু পতাকা এছাড়াও RewriteCond প্রযোজ্য। উল্লেখযোগ্যভাবে, NoCase।

RewriteCond %{HTTP_REFERER}        ^https?://serverfault\.com(/|$)     [NC]

"ServerFault.com" মিলবে


219
2017-12-20 17:44



সাবাশ. [ফিলার] - EEAA
খুব সুন্দর mod_rewrite এবং regex প্রাইমার। +1 টি। - Steven Monday
এটি কখনও কখনও দরকারী যে জানতে RewriteCond আসলে প্রক্রিয়া করা হয় পরে দ্য RewriteRule মিলিত হয়। আপনি হয়ত বলতে পারেন যে "পরবর্তীতে আরও পরে" আপনি যেখানে বলবেন "রিভারাইটকন্ড রিভারাইটউন্ড পূর্ববর্তী পুনর্বিন্যাস রুলটি শর্তাধীন একটি নিয়মকে শর্তাধীন করে।" আপনি উল্লেখ করতে পারেন যে regexes পার্ল-সামঞ্জস্যপূর্ণ নিয়মিত এক্সপ্রেশন। এছাড়াও আপনি একটি বহিরাগত apostrophe আছে "... RewriteRule এটা স্ট্রিং-শুরু বিবেচনা করে ..." - Dennis Williamson
RewriteRule ^/blog/.*/(.*)$ /newblog/$1 মেলে না প্রথম ডিরেক্টরি উপাদান - পুনর্লিখনগুলি ডিফল্টরূপে লোভী হয়। /.*/(.*) উভয় সাথে মেলে / 1 / (2) / এবং / 1/2/3/4/5 / (6) /, তাই আপনাকে / [^ /] * / / উপাদান. - adaptr
@ সিএসআডমিন 1138, আমার মনে হয় এই উত্তরটি ভাল তবে এটি আরও ভালো হতে পারে যদি আপনি পতাকাগুলি ই, এন, এন, পি, পিটি এবং এস উদাহরণস্বরূপ আরও বিস্তৃত করেন কারণ সে পতাকাগুলি কিভাবে কাজ করে তা স্পষ্ট নয়। - Pacerier


মৌলিক বিন্যাস এবং কি   mod_rewrite নিয়ম গঠন?

আমি এই পয়েন্ট sysadmin1138 এর চমৎকার উত্তর স্থগিত করব।

নিয়মিত কি ফর্ম / গন্ধ   এক্সপ্রেশন আমি একটি কঠিন আছে প্রয়োজন   বুঝি?

সিনট্যাক্স ক্রম ছাড়া সিনট্যাক্স মিলিং / রেগুলার এক্সপ্রেশন এবং sysadmin1138 দ্বারা বর্ণিত রিয়াইটিটুল ফ্ল্যাগগুলি, আমি বিশ্বাস করি যে এটি উল্লেখ করে যে mod_rewrite HTTP অনুরোধ শিরোনাম এবং অ্যাপাচের কনফিগারেশনের উপর ভিত্তি করে আপ্যাচ পরিবেশের পরিবর্তনগুলি প্রকাশ করে।

আমি সুপারিশ করতাম AskApache এর mod_rewrite ডিবাগ টিউটোরিয়াল mod_rewrite এ উপলব্ধ ভেরিয়েবলের একটি বিস্তৃত তালিকা জন্য।

সবচেয়ে সাধারণ কি কি   ভুল লিখুন যখন ভুল লিখুন   নিয়ম কি?

পিসআরই সিনট্যাক্সের ভুল বোঝাবুঝির কারণে রিয়াইটারুলের স্টেমের বেশিরভাগ সমস্যাগুলি বিশেষভাবে বিশেষ অক্ষরগুলি বা মেলানোর জন্য ব্যবহৃত পরিবর্তনশীল (গুলি) সামগ্রীতে অন্তর্দৃষ্টির অভাবের ব্যর্থতার কারণে ব্যর্থ।

বৈশিষ্টসূচক সমস্যা এবং প্রস্তাবিত সমস্যা সমাধান:

  • 500 অভ্যন্তরীণ সার্ভার সমস্যা - উইন্ডোজ গাড়ির নিয়ন্ত্রণ সরান কনফিগারেশন ফাইল (গুলি) উপস্থিত থাকলে, নিশ্চিত করুন যে mod_rewrite সক্ষম করা আছে (এতে মোড়ানো নির্দেশাবলী IfModule এই দৃশ্যকল্প এড়ানোর শর্তাধীন), নির্দেশিকা সিনট্যাক্স চেক করুন, সমস্যা সনাক্ত না হওয়া পর্যন্ত নির্দেশাবলী মন্তব্য করুন
  • পুনঃনির্দেশ লুপ - RewriteLog এবং RewriteLogLevel ব্যবহার করুন, সমস্যা সনাক্ত না হওয়া পর্যন্ত নির্দেশিকা মন্তব্য করুন

পরীক্ষার জন্য একটি ভাল পদ্ধতি এবং কি   mod_rewrite নিয়ম যাচাই করা হচ্ছে?

প্রথমে, আপনি যে এনভায়রনমেন্ট ভেরিয়েবল (গুলি) এর সাথে মেলানোর পরিকল্পনা করছেন তার সামগ্রীগুলি দেখুন - যদি আপনার পিএইচপি ইনস্টল থাকে, তবে আপনার অ্যাপ্লিকেশনটিতে নিম্নলিখিত ব্লক যোগ করার মতো এটি সহজ:

<?php
  var_dump($_SERVER);
?>

... তারপরে আপনার নিয়ম লিখুন (বিশেষত একটি ডেভেলপমেন্ট সার্ভারে পরীক্ষার জন্য) এবং আপনার অ্যাপ্যাচে কোনও অসঙ্গতিপূর্ণ মেলিং বা ক্রিয়াকলাপ নোট করুন ত্রুটি লগ ফাইল।

আরো জটিল নিয়ম জন্য, mod_rewrite এর ব্যবহার করুন RewriteLog একটি ফাইল এবং সেট কার্যকলাপ লগ লগ করার নির্দেশিকা RewriteLogLevel 3

এসইও বা কর্মক্ষমতা আছে   mod_rewrite নিয়ম আমি এর প্রভাব   সচেতন হওয়া উচিত?

AllowOverride all Apache হিসাবে অবশ্যই সার্ভারের কর্মক্ষমতা প্রভাবিত করতে হবে .htaccess প্রতিটি অনুরোধের সাথে ফাইল এবং পার্স নির্দেশাবলী - যদি সম্ভব হয়, আপনার সাইটের জন্য VirtualHost কনফিগারেশনে সমস্ত নির্দেশাবলী রাখুন বা সক্ষম করুন .htaccess তাদের প্রয়োজন যা ডিরেক্টরি জন্য শুধুমাত্র overrides।

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

সার্চ ইঞ্জিন রোবটগুলি 1: 1 টি সামগ্রী পছন্দ করে: URI ম্যাপিং (এটি সামগ্রীতে লিঙ্কিং লিঙ্কগুলির জন্য ভিত্তি) - যদি আপনি অস্থায়ী পুনঃনির্দেশগুলি তৈরির জন্য mod_rewrite ব্যবহার করেন অথবা আপনি একাধিক URI এর অধীনে একই সামগ্রী সরবরাহ করছেন তবে নির্দিষ্ট করে একটি ক্যানোনিকাল ইউআরআই আপনার এইচটিএমএল নথি মধ্যে।

যেখানে সাধারণ পরিস্থিতিতে আছে   mod_rewrite ডান মত মনে হতে পারে   কাজের জন্য টুল কিন্তু না?

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

কিছু সাধারণ উদাহরণ কি কি?

AskApache এর mod_rewrite ঠাট এবং টিপস নিয়মিত পপ আপ করে এমন প্রত্যেক সাধারণ ব্যবহারের ক্ষেত্রে কেবলমাত্র কভার ব্যবহার করা হয় তবে, প্রদত্ত ব্যবহারকারীর "সঠিক" সমাধানটি ব্যবহারকারীর কনফিগারেশন এবং বিদ্যমান নির্দেশগুলির পরিশীলিততার উপর নির্ভর করে (এটি কেন সাধারণত এটি দেখতে একটি ভাল ধারণা) অন্যান্য একটি mod_rewrite প্রশ্ন আসে যখনই নির্দেশিকা একটি ব্যবহারকারী আছে)।


38
2017-12-21 01:00



AskApache লিঙ্কের জন্য ধন্যবাদ। আমি কি খুঁজছিলাম! - sica07
AskApache জোড় ASF দ্বারা আনুষ্ঠানিকভাবে অসমর্থিত হয়। তিনি যা বলেছেন তার বেশিরভাগই বিতর্কযোগ্য বা সাধারণ ভুল। - adaptr
@ অ্যাডাপ্টার দয়া করে এমন উচ্চতর সংস্থানগুলি ভাগ করুন যা আপনি স্পষ্টভাবে জানেন। - danlefree
"সাধারণ পরিস্থিতিতে mod_rewrite কাজের জন্য সঠিক সরঞ্জামের মতো মনে হতে পারে তবে তা নয়?" - সহজ পুনঃনির্দেশ, mod_rewrite ইতিমধ্যে ব্যবহার করা হয় না যেখানে। Mod_alias ব্যবহার করুন Redirect অথবা RedirectMatch পরিবর্তে. অ্যাপাচি ডক্সগুলি দেখুন: Mod_rewrite ব্যবহার না করার সময় - MrWhite


অনেক অ্যাডমিন / ডেভেলপারদের মত আমি বছর ধরে পুনর্লিখন নিয়মগুলির জটিলতার সাথে লড়াই করেছি এবং বিদ্যমান আপাচি ডকুমেন্টেশন থেকে অসন্তুষ্ট হয়েছি, তাই আমি কীভাবে নীচে একটি ব্যক্তিগত প্রকল্প হিসাবে সিদ্ধান্ত নিলাম mod_rewrite আসলে অপেরা কোরের বাকি অংশের সাথে কাজ করে এবং ইন্টারঅ্যাক্ট করে, তাই গত কয়েক মাসে আমি যন্ত্রের সাথে টেস্টিংয়ের যন্ত্র তৈরি করেছি strace + এই সব একটি হ্যান্ডেল পেতে উত্স কোড মধ্যে তুরপুন।

এখানে কিছু গুরুত্বপূর্ণ মন্তব্য রয়েছে যা পুনর্বিবেচনা করার জন্য নিয়ম বিকাশকারীদের বিবেচনা করতে হবে:

  • পুনর্লিখনের কিছু দিক সার্ভার কনফিগার, ভার্চুয়াল হোস্ট, ডিরেক্টরি, .htaccess প্রক্রিয়াকরণে সাধারণ যাহোক
  • কিছু প্রসেসিং রুড কনফিগ (সার্ভার কনফিগার, ভার্চুয়াল হোস্ট এবং ডিরেক্টরি) এর জন্য পারদির বিপরীতে খুব ভিন্ন।.htaccess) প্রক্রিয়াকরণ।
  • খারাপ কারণ PerDir প্রক্রিয়াকরণটি আনুমানিকভাবে অভ্যন্তরীণ রেডইরেকট সাইক্লিংকে ট্রিগার করতে পারে, রুট কনফিগারেশনের উপাদানগুলিকে সচেতন থাকতে হবে যেমন পারদির প্রক্রিয়াকরণ এটি ট্রিগার করতে পারে।

আমি ফাস হিসাবে যাব যেহেতু এই কারণে আপনাকে পুনঃলিখন ব্যবহারকারী সম্প্রদায়গুলিকে দুই ভাগে বিভক্ত করতে হবে এবং তাদের সম্পূর্ণভাবে আলাদাভাবে আচরণ করতে হবে:

  • অ্যাপাচি কনফিগারেশনের রুট অ্যাক্সেস সহ যারা। এই সাধারণত একটি অ্যাপ্লিকেশন ডেডিকেটেড সার্ভার / ভিএম সঙ্গে অ্যাডমিন / বিকাশকারী, এবং এখানে বার্তা বেশ সহজ: ব্যবহার এড়াতে .htaccess সব সম্ভব যদি ফাইল; আপনার সার্ভার বা vhost কনফিগারেশন সবকিছু করতে। ডেবগিংটি যুক্তিসঙ্গত সহজ কারণ বিকাশকারী ডিবাগিং সেট করতে এবং rewrite.log ফাইলগুলিতে অ্যাক্সেস করতে পারে।

  • একটি ভাগ হোস্টেড সেবা ব্যবহারকারীদের (এসএইচএস)

    • যেমন ব্যবহারকারীদের আছে ব্যবহার করা .htaccess / উপলব্ধ বিকল্প নেই হিসাবে perdir প্রক্রিয়াকরণ।
    • খারাপ, এই ধরনের ব্যবহারকারীদের দক্ষতা স্তর (যতক্ষন পর্যন্ত mod_rewrite এর regexp চালিত সিঁড়ি-যুক্তি ব্যবহার করে) অভিজ্ঞ প্রশাসকদের তুলনায় সাধারণত উল্লেখযোগ্যভাবে কম।
    • অ্যাপাচি এবং হোস্টিং প্রদানকারীরা কোন ডিবাগিং / ডায়গনিস্টিক সহায়তা সরবরাহ করে না। শুধুমাত্র ডায়গনিস্টিক তথ্য একটি সফল পুনঃনির্দেশ, ভুল URI একটি পুনঃনির্দেশ। অথবা একটি 404/500 স্ট্যাটাস কোড। এই তাদের বিভ্রান্ত এবং অসহায় ছেড়ে।
    • Apache অত্যন্ত ব্যবহারযোগ্য এই rewriting এই ব্যবহারের ক্ষেত্রে কাজ করে কিভাবে ব্যাখ্যা। উদাহরণস্বরূপ এটি PerDir কি একটি স্পষ্ট ব্যাখ্যা প্রদান করে না .htaccessফাইল নির্বাচিত এবং কেন। এটি পারদির সাইক্লিংয়ের জটিলতাগুলি এবং এগুলি কীভাবে এড়ানো যায় তা ব্যাখ্যা করে না।

সম্ভবত একটি তৃতীয় সম্প্রদায়: এসএইচএস প্রদানকারীর প্রশাসক এবং সহায়তা কর্মী যারা উভয় শিবিরে পা দিয়ে শেষ হয় এবং উপরের ফলাফলগুলি ভোগ করতে হয়।

আমি নিবন্ধ-শৈলী ব্লগ পোস্টের একটি দম্পতি (যেমন .Htaccess ফাইল পুনর্বিবেচনা নিয়ম ব্যবহার আরও) যা অনেক বিস্তারিত পয়েন্ট জুড়ে দেয় যা আমি এই পোস্টটিকে সংক্ষিপ্ত রাখার জন্য এখানে পুনরাবৃত্তি করব না। আমার নিজস্ব শেয়ার্ড পরিষেবা এবং কিছু ডেডিকেটেড & ভিএম ফ্লস প্রকল্পগুলি সমর্থন করে। আমি আমার এসএইচএস একাউন্টের জন্য একটি পরীক্ষামূলক যানবাহন হিসাবে একটি স্ট্যান্ডার্ড LAMP VM ব্যবহার করে শুরু করেছি, কিন্তু শেষ পর্যন্ত আমি এটি সঠিক মিরর VM (বর্ণিত এখানে)।

যাইহোক, অ্যাডমিন সম্প্রদায় সমর্থন করা উচিত কিভাবে শর্তাবলী .htaccess ব্যবহারকারীরা, আমি মনে করি আমাদের বিকাশ ও অফার করতে হবে:

  • PerDir প্রক্রিয়াকরণে পুনঃলিখন পদ্ধতি আসলে কীভাবে কাজ করে সে সম্পর্কে একটি সুসঙ্গত বর্ণনা
  • নির্দেশাবলীর একটি সেট / কীভাবে লিখতে হবে তার সর্বোত্তম অনুশীলন .htaccess পুনরায় লিখুন নিয়ম
  • W3C এইচটিএমএল পার্সারের মতো একটি সহজ ওয়েব ভিত্তিক পুনর্লিখন স্ক্রিপ্ট পসারার সাজানোর, কিন্তু ব্যবহারকারীরা পরীক্ষা URIs কে ইনপুট করতে পারে বা একই ভেক্টর পরীক্ষা করতে এবং পুনঃলিখন লজিক প্রবাহের অবিলম্বে লগ পেতে পারেন /
  • আপনার নিয়মগুলি থেকে অন্তর্নির্মিতভাবে কীভাবে ডায়ালগস্টিকগুলি পেতে হয় তা নির্দেশ করে (উদাঃ।

    • ব্যবহার [E=VAR:EXPR] যে শোষণ EXPR টার্গেট স্ক্রিপ্টে ডায়গনিস্টিক হিসাবে উপলব্ধ করতে ব্যাকরেকেন্সগুলি ($ N বা% N) প্রসারিত করবে।
    • আপনি যদি [OR], [C], [SKIP] এবং [L] ফ্ল্যাগগুলি ব্যবহার করে আপনার পুনর্নির্মাণের নিয়মগুলি শীর্ষকভাবে আদেশ করেন যাতে পুরো পুনর্লিখন প্রকল্পটি কাজ করে বিনা অভ্যন্তরীণ পুনঃনির্দেশনার কাজে লাগানোর প্রয়োজন, তারপর আপনি সমস্ত লুপিং ঝামেলা এড়ানোর জন্য 1 টি নিয়ম হিসাবে নিম্নলিখিতটি যোগ করতে পারেন:

      RewriteCond %{ENV:REDIRECT_STATUS} !=""
      RewriteRule .  -  [L]
      

21
2018-01-14 16:50



এই ভাল নথিভুক্ত করা হয়। আপনি ডকুমেন্টেশন এই ব্যাখ্যা না কেন বলে? - adaptr
আপনাকে যা করতে হবে তা সাবস্ক্রাইব করতে হবে .htaccess বিষয় এবং আপনি দেখতে হবে। বেশির ভাগ নতুনই হতাশায় বিভ্রান্ত হয়ে পড়ে - এদের মধ্যে বেশিরভাগই তাদের প্রথম অভিজ্ঞতাটি LAMP পরিষেবা এবং mod_rewrite ভাগ করে নেওয়া পরিষেবাটিতে থাকে এবং অতএব সিস্টেম / vhost কনফিগারেশনের কোন রুট অ্যাক্সেস নেই এবং এর মাধ্যমে প্রতি ডির প্রক্রিয়াকরণ ব্যবহার করতে হয় .htaccessনথি পত্র. গুরুত্বপূর্ণ পার্থক্য আছে যা শিক্ষানবিসকে "রক্তপাত করা" হয়েছে। আমি নিজেকে একজন পাওয়ার-ইউজার হিসেবে বিবেচনা করব এবং এখনও আমি subtleties আবিষ্কার করছি। আমি বললাম কিছুটা কাজ করার জন্য আমাকে স্ট্রাস এবং সোর্স-কোড স্ক্যানিং ব্যবহার করতে হয়েছে। প্রয়োজন হবে না। :-( - TerryE
আমি সম্পূর্ণভাবে রাজী. "আমরা পুনর্লিখন ব্যবহারকারী সম্প্রদায়গুলিকে দুই ভাগে বিভক্ত করতে এবং তাদের সম্পূর্ণরূপে আলাদাভাবে আচরণ করার প্রয়োজন।" কিছু ব্যবহারকারী শেয়ারিং হোস্টিং ব্যবহার করছেন প্রয়োজন ভরসা করা .htaccess, যা অত্যন্ত ভয়াবহ, জটিল, এবং এমনকি বিভ্রান্তিকর বিশেষজ্ঞদের জন্য। আমি এখনও সমস্যা হচ্ছে। - Ryan


Rewritemap ব্যবহার করে

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

RewriteMap এর জন্য সাধারণ সিনট্যাক্স হল:

RewriteMap MapName MapType:MapSource

উদাহরণ স্বরূপ:

RewriteMap examplemap txt:/path/to/file/map.txt

তারপরে আপনি এই মত গঠনের জন্য মানচিত্রের নাম ব্যবহার করতে পারেন:

${examplemap:key}

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

http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritemap

Unescaping স্ট্রিং।

চারটি অভ্যন্তরীণ মানচিত্র আপনি কিছু ম্যানিপুলেশন করতে ব্যবহার করতে পারেন। বিশেষ করে unescaping স্ট্রিং সহজেই আসতে পারেন।

উদাহরণস্বরূপ: আমি অনুসন্ধান স্ট্রিংয়ের স্ট্রিং "ক্যাফে" এর জন্য পরীক্ষা করতে চাই। যাইহোক, ব্রাউজারটি আমার সার্ভারে পাঠানোর আগে এটিকে অব্যাহতি দেবে, তাই আমি যে স্ট্রিংটি মেলে ধরতে চাই সেটির জন্য সংস্করণটি যে URL থেকে পালিয়েছে সেটি আমি চিন্তা করতে হবে, অথবা আমি কেবল এটি আনসস্কেপ করতে পারি ...

RewriteMap unescape int:unescape

RewriteCond %{QUERY_STRING}  (location|place)=(.*)
RewriteCond ${unescape:%2}   café
RewriteRule ^/find/$         /find/1234? [L,R]

নোট স্ট্রিং প্যারামিটারটি টেনে ধরার যুক্তিটি ক্যাপচার করতে আমি কীভাবে রিভারাইটকন্ডটি ব্যবহার করব তা নোট করুন এবং তারপরে দ্বিতীয় পুনর্লিখনকন্ডে মানচিত্রটি এটি আনসেক্স করার জন্য ব্যবহার করুন। এই তারপর তুলনা পায়। এছাড়াও নোট করুন যে আমাকে rewritemap কী হিসাবে% 2 এর প্রয়োজন,% 1 এর মধ্যে "অবস্থান" বা "স্থান" থাকবে। যখন আপনি গ্রুপের নিদর্শনগুলিতে বন্ধনী ব্যবহার করেন তখন সেগুলিও ধরা হবে, আপনি ক্যাপচারের ফলাফল ব্যবহার করার পরিকল্পনা করছেন নাকি ...


15
2018-04-06 11:57



শেষ বাক্য বেশ সত্য নয়। দ্য mod_rewrite regexp ইঞ্জিন যেমন ক্যাপচার গ্রুপ সমর্থন করে (?:location|place) এবং এই শুধুমাত্র উদাহরণ এক ক্যাপচার হবে। - TerryE


সবচেয়ে সাধারণ কি কি   ভুল লিখুন যখন ভুল লিখুন   নিয়ম কি?

একটি সত্যিকারের সহজ পিটফল যখন আপনি URL টি পুনঃলিখন করেন যা স্পষ্ট পথ পরিবর্তন করে, যেমন। থেকে /base/1234/index.html থেকে /base/script.php?id=1234। কোন চিত্র বা CSS স্ক্রিপ্ট অবস্থানের আপেক্ষিক পাথের সাথে ক্লায়েন্ট পাওয়া যাবে না। এটি সমাধান করার জন্য কয়েকটি বিকল্প পাওয়া যেতে পারে এই প্রশ্ন


12
2018-01-01 04:02



লিঙ্ক জন্য ধন্যবাদ। বিশেষ করে যখন অন্য দলের সদস্যদের সাথে কাজ করে যা পুনর্লিখনের সাথে পরিচিত না হয়, আমি একটি যুক্ত করে দেখি <base> ট্যাগ অনুসরণ করা সহজ এবং এখনও আপেক্ষিক পাথ সক্রিয় করতে। - kontur