ডিবাগ করার জন্য টিপস। Htaccess পুনর্লিখনের নিয়ম


272

অনেকগুলি পোস্টারকে তাদের .htaccessফাইলে রাইরাইটরুল এবং রাইরাইটকন্ড বিবৃতি ডিবাগ করতে সমস্যা হয় । এর মধ্যে বেশিরভাগ একটি ভাগ করা হোস্টিং পরিষেবা ব্যবহার করছে এবং তাই রুট সার্ভার কনফিগারেশনটিতে অ্যাক্সেস নেই। তারা .htaccessপুনর্লিখনের জন্য ফাইলগুলি এড়াতে পারবেন না এবং পুনরায় লেখার লোগলিভেল সক্ষম করতে পারবেন না "যেমনটি অনেক উত্তরদাতারা পরামর্শ দেন Also এছাড়াও অনেকগুলি .htaccessস্পেসিফিক সমস্যা এবং প্রতিবন্ধকতাগুলি ভালভাবে আচ্ছাদিত হয় না a স্থানীয় পরীক্ষা এলএএমপি স্ট্যাক স্থাপন করা বেশিরভাগ ক্ষেত্রে শেখার বক্ররেখার সাথে জড়িত ves ।

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

  1. বুঝতে পারছেন যে .htaccessফাইলের মাধ্যমে মোড_আরাইট ইঞ্জিন চক্র । ইঞ্জিনটি এই লুপটি চালায়:

    do
      execute server and vhost rewrites (in the Apache Virtual Host Config)
      find the lowest "Per Dir" .htaccess file on the file path with rewrites enabled
      if found(.htaccess)
         execute .htaccess rewrites (in the user's directory)
    while rewrite occurred
    

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

  2. এটি নিশ্চিত করে নিন যে পরীক্ষার ধরণগুলির একটি সেট বিরুদ্ধে বৈধ সিনট্যাক্স কিনা এবং পরীক্ষার ইউআরআইয়ের সম্পূর্ণ পরিসীমা নিয়ে আপনি যা ইচ্ছা তেমন করে তা নিশ্চিত করার জন্য প্রতিটি রেজিএক্সএক্সের বাক্য গঠনটি সঠিক কিনা Make আরও তথ্যের জন্য নীচের উত্তর দেখুন ।

  3. পরীক্ষার ডিরেক্টরিতে ক্রমবর্ধমানভাবে আপনার বিধিগুলি তৈরি করুন। আপনি .htaccessআপনার প্রধান নিয়মগুলি স্ক্রু না করে এবং আপনার সাইটের কাজ বন্ধ না করেই একটি পৃথক পরীক্ষা ডিরেক্টরি (ট্রি) এবং ডিবাগ রোলসেটগুলি সেটআপ করতে "পাথ বৈশিষ্ট্যের গভীরতম ফাইলটি কার্যকর করুন" ব্যবহার করতে পারেন । আপনাকে একবারে এগুলি যুক্ত করতে হবে কারণ পৃথক নিয়মে ব্যর্থতা স্থানীয়করণের একমাত্র উপায়।

  4. সার্ভার এবং পরিবেশের ভেরিয়েবলগুলি ডাম্প আউট করতে একটি ডামি স্ক্রিপ্ট স্টাব ব্যবহার করুন । ( তালিকাভুক্তি দেখুন 2 ) যদি আপনার অ্যাপ্লিকেশনটি ব্যবহার করে, বলুন, blog/index.phpতবে আপনি test/blog/index.phpএটিকে অনুলিপি করতে পারেন এবং testসাব - ডিরেক্টরিতে আপনার ব্লগের নিয়মগুলি পরীক্ষা করতে এটি ব্যবহার করতে পারেন । প্রতিস্থাপনের স্ট্রিং সঠিকভাবে ব্যাখ্যায় পুনর্লিখন ইঞ্জিন যেমন, নিশ্চিত করতে আপনি পরিবেশের ভেরিয়েবলগুলিও ব্যবহার করতে পারেন

    RewriteRule ^(.*) - [E=TEST0:%{DOCUMENT_ROOT}/blog/html_cache/$1.html]
    

    এবং phpinfo ডাম্পে এই REDIRECT_ * ভেরিয়েবলগুলি সন্ধান করুন। বিটিডাব্লু, আমি এটি ব্যবহার করেছি এবং আমার সাইটে আবিষ্কার করেছি যা এর %{ENV:DOCUMENT_ROOT_REAL}পরিবর্তে আমাকে ব্যবহার করতে হয়েছিল। পুনঃনির্দেশকারী লুপিংয়ের ক্ষেত্রে REDIRECT_REDIRECT_ * ভেরিয়েবলগুলি পূর্ববর্তী পাসের তালিকা করে। ইত্যাদি ..

  5. আপনার ব্রাউজার ক্যাশে ভুল 301 পুনর্নির্দেশগুলি দ্বারা কামড় না পেয়েছে তা নিশ্চিত করুন । দেখুন নিচের উত্তর । এর জন্য আমার উলরিখ পালহাকে ধন্যবাদ ।

  6. পুনর্লিখন ইঞ্জিনটি একটি .htaccessপ্রসঙ্গের মধ্যে ক্যাসকেড বিধিগুলির প্রতি সংবেদনশীল বলে মনে হয় , (এটি হ'ল RewriteRuleপ্রতিস্থাপনের ফলাফল এবং এটি আরও বিধিগুলির পরেও পড়ে), কারণ আমি অভ্যন্তরীণ সাব-অনুরোধগুলির সাথে বাগগুলি পেয়েছি (1) , এবং ভুল প্যাথটিএনপিও প্রসেসিং যা প্রায়শই পারে [এনএস], [এল] এবং [পিটি] পতাকা ব্যবহার দ্বারা প্রতিরোধ করা হবে।

আর কোন মন্তব্য বা পরামর্শ?

তালিকা 1 - phpinfo

<?php phpinfo(INFO_ENVIRONMENT|INFO_VARIABLES);

10
এগুলি ভাল ... সম্ভবত আপনার এগুলি প্রশ্ন থেকে উত্তরের দিকে নিয়ে যাওয়া উচিত।
w00t

@ w00t, আমি আপনার পরামর্শ অনুসারে রেজিপেক্স চেকারকে বিভক্ত করেছি কারণ আমি অন্যান্য উত্তরের লিঙ্কে এটি উল্লেখ করতে চাই।
টেরি

3
আপনি ডক্স থেকে কন্ট্রোল ফ্লো ডায়াগ্রামটি আপনার প্রথম পরামর্শে যুক্ত করতে চাইতে পারেন । আইএমও এটি কোনও সিউডোকোড বা ব্যাখ্যার চেয়ে বোঝা অনেক সহজ এবং এটি মোড-রাইরাইট ভুডোর সবচেয়ে কালোতম অংশ।
SáT

6 নম্বর একটি বিশাল চুক্তি। .Htaccess ফাইলগুলিতে স্ট্যান্ডার্ড অ্যাপাচি কনফিগারেশন ফাইলগুলিতে আলাদাভাবে আচরণ করে এমন নিয়মগুলি পুনরায় লেখুন must
আয়ান কলিন্স

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

উত্তর:


132

নিয়ম পরীক্ষার জন্য এখানে কয়েকটি অতিরিক্ত টিপস যা ভাগ করা হোস্টিংয়ের ক্ষেত্রে ব্যবহারকারীদের জন্য ডিবাগটি সহজ করতে পারে

1. একটি নকল ব্যবহারকারী এজেন্ট ব্যবহার করুন

নতুন নিয়মের পরীক্ষা করার সময়, কোনও শর্ত যুক্ত করুন এটি fakeব্যবহারকারীর এজেন্টের সাথে এটি সম্পাদন করতে যা আপনি আপনার অনুরোধগুলির জন্য ব্যবহার করবেন। এইভাবে এটি আপনার সাইটে অন্য কাউকে প্রভাবিত করবে না।

যেমন

#protect with a fake user agent
RewriteCond %{HTTP_USER_AGENT}  ^my-fake-user-agent$
#Here is the actual rule I am testing
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC] 
RewriteRule ^ http://www.domain.com%{REQUEST_URI} [L,R=302] 

আপনি যদি ফায়ারফক্স ব্যবহার করছেন, আপনি নকল ব্যবহারকারী এজেন্ট স্ট্রিং এবং পরীক্ষা তৈরি করতে ব্যবহারকারী এজেন্ট সুইচার ব্যবহার করতে পারেন ।

2. আপনি পরীক্ষা শেষ না করা পর্যন্ত 301 ব্যবহার করবেন না

আমি এমন অনেকগুলি পোস্ট দেখেছি যেখানে লোকেরা এখনও তাদের বিধি পরীক্ষা করে চলেছে এবং তারা 301 টি ব্যবহার করছে। না

আপনি যদি নিজের সাইটে পরামর্শ 1 ব্যবহার না করে থাকেন তবে কেবল আপনিই নয়, সেই সময় আপনার সাইটে আসা যে কেউ 301 দ্বারা প্রভাবিত হবে।

মনে রাখবেন যে এগুলি স্থায়ী এবং আক্রমণাত্মকভাবে আপনার ব্রাউজারে ক্যাশে হয়েছে। আপনি নিশ্চিত না হওয়া পর্যন্ত 302 ব্যবহার করুন, তারপরে এটি 301 এ পরিবর্তন করুন।

৩. মনে রাখবেন যে 301 গুলি আপনার ব্রাউজারে আগ্রাসীভাবে ক্যাশে হয়েছে

যদি আপনার নিয়মটি কার্যকর না হয় এবং এটি আপনার কাছে সঠিক দেখাচ্ছে এবং আপনি পরামর্শ 1 এবং 2 ব্যবহার করছেন না, তবে আপনার ব্রাউজারের ক্যাশে সাফ করার পরে বা ব্যক্তিগত ব্রাউজিংয়ের সময় পুনরায় পরীক্ষা করুন।

4. একটি HTTP ক্যাপচার সরঞ্জাম ব্যবহার করুন

আপনার ব্রাউজার এবং সার্ভারের মধ্যে প্রকৃত HTTP ট্র্যাফিক দেখতে ফিডলারের মতো একটি HTTP ক্যাপচার সরঞ্জাম ব্যবহার করুন ।

অন্যেরা হয়ত বলতে পারেন যে আপনার site does not look right, আপনি এটির পরিবর্তে all of the images, css and js are returning 404 errorsসমস্যাটি সঙ্কুচিত করার পরিবর্তে এটি দেখতে এবং রিপোর্ট করতে পারেন ।

অন্যরা আপনাকে জানায় যে আপনি started at URL A and ended at URL C, তারা দেখতে পাবে যে তারা শুরু করেছে URL A, were 302 redirected to URL B and 301 redirected to URL C। এমনকি ইউআরএল সি চূড়ান্ত লক্ষ্য হলেও আপনি জানবেন যে এটি SEO এর পক্ষে খারাপ এবং এটি ঠিক করা দরকার be

আপনি সার্ভারের পাশে সেট করা ক্যাশে শিরোলেখগুলি দেখতে পারবেন, অনুরোধগুলি পুনরায় খেলুন, পরীক্ষার জন্য অনুরোধ শিরোনাম পরিবর্তন করুন ....



9
উলিরিচ, এই ইনপুটটির জন্য অনেক ধন্যবাদ। আপনি এমন কিছু দিক বেছে নিয়েছেন যা আমি আমার তালিকায় রাখার কথা ভাবিনি। 301 ডিবাগিং ইস্যুতে, আমি "বেসরকারী ব্রাউজিং" (এ কেএ "পর্ন-মোড") এ Chrome ব্যবহার করি কারণ আপনি উইন্ডোটি বন্ধ করার সাথে সাথে এই স্থিতির তথ্যটি ডাম্প করে। আমি আশা করি আপনি একটি গুরুত্বপূর্ণ বিষয় হিসাবে এটি আমাকে "গ্রহণ" না করার আপত্তি করবেন না, তবে একটিও সেরা উত্তর নয়। আবার ধন্যবাদ. :)
টেরি

1
এটি পরিষ্কার করার জন্য (আপনার [L,R=302]
কোডটিতে

6
আপনাকে [L, R=302]কেবলমাত্র [L,R]ডিফল্টটি করতে হবে তা স্পষ্ট করে উল্লেখ করার দরকার নেই302
রহিল উজির

2
@ গুডেয়ে, "ক্রোম> সেটিংস> সাধারণ> ক্যাচ অক্ষম করুন যখন ডেভটুলগুলি খোলা আছে" চেকবক্সটি দেখুন।
জনস্নেল

83

অনলাইন .htaccess পুনর্লিখন পরীক্ষা

আমি রেজিএক্স সহায়তার জন্য এই গুগলিংটি পেয়েছি , .htaccessপ্রতিবার যখন আমি একটি ছোট পরিবর্তন করেছি তখন নতুন ফাইলগুলি আপলোড করা থেকে এটি আমার অনেক সময় বাঁচায় ।

সাইট থেকে:

htaccess পরীক্ষক

আপনার এইচটিসেসের পুনর্লিখনের নিয়মগুলি পরীক্ষা করার জন্য, আপনি যে url এ নিয়ম প্রয়োগ করছেন তা কেবল পূরণ করুন, আপনার এইচটিসেসের সামগ্রীগুলি বৃহত ইনপুট অঞ্চলে রাখুন এবং "এখনই পরীক্ষা করুন" বোতাম টিপুন।


6
এই সরঞ্জামটির পয়েন্টারটির জন্য ধন্যবাদ, যা আমি আমার সমস্যার ডিবাগ করার জন্য সবচেয়ে সহজ উপায় পেয়েছি।
ববহাই

আপনার ওয়েবস্পেসে যদি ssh অ্যাক্সেস থাকে তবে অন্য একটি বিকল্প হ'ল সার্ভারের সম্পাদকের মাধ্যমে সরাসরি .htaccess পরিবর্তন করা।
sjas

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

এই সরঞ্জামটি নির্দেশ করার জন্য ধন্যবাদ। এটি সহায়ক, কখনও কখনও অ্যাপাচি htaccess নিজেই ডিবাগ করা খুব সুন্দর o ধন্যবাদ। বড় ধন্যবাদ
বেনিয়ামিন লিমেন্টো

লিঙ্কটি উল্লেখ করা বগী বলে মনে হচ্ছে এবং সর্বদা আপনাকে সঠিক আউটপুট দেয় না। একেবারে নিশ্চিত হওয়ার জন্য দয়া করে আসল অ্যাপাচি দেখুন।
পার্থ

13

.Htaccess ফাইলগুলিতে ভুলে যাবেন না এটি একটি সম্পর্কিত ইউআরএল ched

একটি .htaccess ফাইলে নিম্নলিখিত RewritRule কখনই মেলে না:

RewriteRule ^/(.*)     /something/$s

4
হ্যাঁ স্ট্রিং একটি লেখা মধ্যে প্রতিপালিত রুল আপেক্ষিক এবং সেইজন্য কোন নেতৃস্থানীয় উপর ছিনতাই হয় /, কিন্তু এই Stripping লেখা একত্র ম্যাচ স্ট্রিং জন্য ঘটবে না Cond কমান্ড।
টেরি

8

প্রতিটি Regexp এর বাক্য গঠন সঠিক কিনা তা নিশ্চিত করুন

এটি বৈধ বাক্য গঠন এবং এটি পরীক্ষা ইউআরআইয়ের সম্পূর্ণ পরিসরের সাথে আপনি যা চান তা করে তা নিশ্চিত করার জন্য পরীক্ষার ধরণগুলির সেটগুলির বিরুদ্ধে পরীক্ষার মাধ্যমে।

একটি সাধারণ স্ক্রিপ্টের জন্য নীচে regexpCheck.php দেখুন যা আপনি এটি করতে সহায়তা করার জন্য আপনার সাইটে একটি ব্যক্তিগত / পরীক্ষার ডিরেক্টরিতে যুক্ত করতে পারেন। আমি এই সংক্ষিপ্ত রাখার চেয়ে সুন্দর। এটি একটি ফাইলের মধ্যে অতীতregexpCheck.phpএটি আপনার ওয়েবসাইটে এটি ব্যবহার করার জন্য একটি পরীক্ষা ডিরেক্টরিতে মধ্যে ফেলে দিন। এটি আপনাকে যে কোনও রেজিএক্সপেক্ট তৈরি করতে সহায়তা করবে এবং এটি করার সাথে সাথে পরীক্ষার কেসগুলির একটি তালিকার বিরুদ্ধে এটি পরীক্ষা করবে। আমি এখানে পিএইচপি পিসিআরই ইঞ্জিন ব্যবহার করছি, তবে অ্যাপাচি উত্সটি দেখে, এটি মূলত আপাচে ব্যবহৃত একটির মতো ical এখানে অনেক হাওটোস এবং টিউটোরিয়াল রয়েছে যা টেমপ্লেট সরবরাহ করে এবং আপনাকে আপনার রেজিএক্সপ্যাকস দক্ষতা তৈরি করতে সহায়তা করতে পারে।

তালিকা 1 - regexpCheck.php

<html><head><title>Regexp checker</title></head><body>
<?php 
    $a_pattern= isset($_POST['pattern']) ? $_POST['pattern'] : "";
    $a_ntests = isset($_POST['ntests']) ? $_POST['ntests'] : 1;
    $a_test   = isset($_POST['test']) ? $_POST['test'] : array();
    
    $res = array(); $maxM=-1; 
    foreach($a_test as $t ){
        $rtn = @preg_match('#'.$a_pattern.'#',$t,$m);
        if($rtn == 1){
            $maxM=max($maxM,count($m));
            $res[]=array_merge( array('matched'),  $m );
        } else {
            $res[]=array(($rtn === FALSE ? 'invalid' : 'non-matched'));
        }
    } 
?> <p>&nbsp; </p>
<form method="post" action="<?php echo $_SERVER['SCRIPT_NAME'];?>">
    <label for="pl">Regexp Pattern: </label>
    <input id="p" name="pattern" size="50" value="<?php echo htmlentities($a_pattern,ENT_QUOTES,"UTF-8");;?>" />
    <label for="n">&nbsp; &nbsp; Number of test vectors: </label>
    <input id="n" name="ntests"  size="3" value="<?php echo $a_ntests;?>"/>
    <input type="submit" name="go" value="OK"/><hr/><p>&nbsp;</p>
    <table><thead><tr><td><b>Test Vector</b></td><td>&nbsp; &nbsp; <b>Result</b></td>
<?php 
    for ( $i=0; $i<$maxM; $i++ ) echo "<td>&nbsp; &nbsp; <b>\$$i</b></td>";
    echo "</tr><tbody>\n";
    for( $i=0; $i<$a_ntests; $i++ ){
        echo '<tr><td>&nbsp;<input name="test[]" value="', 
            htmlentities($a_test[$i], ENT_QUOTES,"UTF-8"),'" /></td>';
        foreach ($res[$i] as $v) { echo '<td>&nbsp; &nbsp; ',htmlentities($v, ENT_QUOTES,"UTF-8"),'&nbsp; &nbsp; </td>';}
        echo "</tr>\n";
    }
?> </table></form></body></html>

1
তাত্ক্ষণিক দ্রষ্টব্য: import_request_variablesপিএইচপি 5.3 এ অবমূল্যায়ন করা হয়েছিল এবং 5.4-এ সরানো হয়েছিল। extract($_GET)এর সাথে মিলিত extract($_POST)একই ফাংশনটি সম্পাদন করতে পারে তবে সমস্ত ভেরিয়েবলগুলির নাম থেকে উপসর্গটি মুছতে হবে। সূত্র: php.net/manual/en/function.import-request-variables.php
জেফ ল্যামবার্ট

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

ওহ আমার, সম্পাদনার পরেও, কেবল আপনার কোড অনুলিপি করে ভাল ফলাফল পেতে পারে না ... তবে চারপাশে রিজেক্স ফিডারগুলির সাথে আমি মনে করি যে কোনওভাবেই আপনার সরঞ্জামটি অপ্রচলিত। এই শীতল সরঞ্জামগুলি পরীক্ষা করে দেখুন: regex101.com বা refiddle.com বা regexr.com
hexerei সফ্টওয়্যার

@ hexereisoftware, এই পোস্টটি 3 বছরের পুরানো, সুতরাং এখন ব্যবহৃত পিএইচপি সংস্করণ এবং অ্যাপাচি সংস্করণের উপর নির্ভর করে সূক্ষ্ম সমস্যা থাকতে পারে। তবে সূক্ষ্ম পার্থক্যের সাথে প্রত্যেকেই রেজিপ্সের বিভিন্ন রূপ রয়েছে। যেমনটি আমি বলেছিলাম যে অ্যাপাচি কোডটি একটি পিসিআরই ইঞ্জিন ব্যবহার করে যা পিএইচপি ইঞ্জিনের সাথে খুব মিল। আমি নিশ্চিত নই যে অন্য রুপগুলির সাথে কী কী পার্থক্য রয়েছে। নেট, তাই কোনও অনলাইন সংস্থান ব্যবহারের আপনার পরামর্শটি ভাল, আমি স্পষ্টভাবে অ্যাপাচি বা পিএইচপি সিনট্যাক্স সমর্থন করে এমন একটিটির সাথে থাকব। :-)
টেরি

পার্ল নিকটতম হবে, তবে পিএইচপি একই বাক্য গঠন ব্যবহার করে
হেক্সেরেই সফ্টওয়্যার

7

ডলার সাইন নয়, আপনি ভেরিয়েবলের সামনে শতাংশ চিহ্ন ব্যবহার করেছেন তা নিশ্চিত করুন।

এটা %{HTTP_HOST}, না ${HTTP_HOST} । ত্রুটি_লগে কিছুই থাকবে না, কোনও অভ্যন্তরীণ সার্ভার ত্রুটি থাকবে না, আপনার রিজপ্লেক্স এখনও সঠিক, নিয়মটি কেবল মিলবে না। আপনি যদি জাঙ্গো / জেনশি টেম্পলেটগুলির সাথে অনেক কাজ করেন এবং ${}পেশীর স্মৃতিতে পরিবর্তনশীল বিকল্পের জন্য থাকেন তবে এটি সত্যিই ঘৃণ্য is


1
হ্যাঁ, $ প্রতিস্থাপনের ভেরিয়েবলগুলি সর্বশেষ রাইরাইটরুল প্যাটার্নের সাথে সম্পর্কিত এবং % টি শেষ রাইরাইটকন্ড প্যাটার্নের সাথে সম্পর্কিত এবং% {env: XXX
as

7

আমি যে ঘন্টা দুটো নষ্ট করেছি তা থেকে একটি:

আপনি যদি এই সমস্ত টিপস প্রয়োগ করেছেন এবং কেবল 500 টি ত্রুটিই চালিয়ে যাচ্ছেন কারণ আপনার সার্ভার ত্রুটি লগটিতে অ্যাক্সেস নেই, সম্ভবত সমস্যা .htaccess এ নয় তবে এটি যে ফাইলগুলিতে পুনঃনির্দেশ করে সেগুলিতে।

আমি আমার .htaccess- সমস্যাটি স্থির করার পরে আমি আরও কিছু ঘন্টা আরও কিছু ঠিক করার জন্য ব্যয় করেছি, যদিও আমি কিছু অনুমতি সম্পর্কে ভুলে গিয়েছিলাম।


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

6

পরিবেশের ভেরিয়েবলগুলি সেট করুন এবং সেগুলি পেতে হেডারগুলি ব্যবহার করুন:

আপনি ওপি দ্বারা উল্লিখিত রাইরাইটরুল লাইনের সাহায্যে নতুন পরিবেশের ভেরিয়েবলগুলি তৈরি করতে পারেন:

RewriteRule ^(.*) - [E=TEST0:%{DOCUMENT_ROOT}/blog/html_cache/$1.html]

আপনি যদি কাজ করতে কোনও সার্ভার-সাইড স্ক্রিপ্ট না পেতে পারেন তবে আপনি কীভাবে এই পরিবেশের পরিবর্তনশীলটি পড়তে পারেন? একটি সমাধান শিরোনাম সেট করা হয়:

Header set TEST_FOOBAR "%{REDIRECT_TEST0}e"

মান পরিবেশের ভেরিয়েবলের জন্য নির্দিষ্টকারক সহ ফর্ম্যাট স্পেসিফায়ারকে গ্রহণ করে%{NAME}e (ছোট হাতের ই ভুলবেন না)। কখনও কখনও, আপনার REDIRECT_উপসর্গটি যুক্ত করতে হবে , তবে উপসর্গটি কখন যুক্ত হবে এবং কখন তা প্রযোজ্য হবে তা আমি প্রকাশ করি নি।


REDIRECT_উপসর্গটি কখন ব্যবহার করবেন বা ব্যবহার করবেন না সে সম্পর্কে আপনি আরও অন্তর্দৃষ্টি পেয়েছেন ? এছাড়াও, আমি অন্যান্য (htaccess) প্রসঙ্গে উপসর্গগুলি সম্পর্কে পরিভাষাও দেখছি, তবে এটি কী বোঝাতে চেয়েছিল তা কখনই পরিষ্কার হয়নি। এর অর্থ কি এর অর্থ হ'ল নির্দিষ্ট আদেশগুলি (তবে অন্যান্য আদেশ নয়) ব্যবহার করার সময় আপনার অবশ্যই নিজের চলকটির উপসর্গের সাথে নাম লিখতে হবে বা আপনার নামযুক্ত ভেরিয়েবলের সাথে উপসর্গ যুক্ত করতে হবে? আপনার উদাহরণটি প্রথম যা ভের সংজ্ঞা এবং ভের ব্যবহার উভয়ই দেখায় , তাই এগুলি থেকে আমি পরবর্তীটি মনে করতে আগ্রহী! দস্তাবেজগুলি খুব সাহায্য করেছে - তারা ধরে নিচ্ছে যে আমরা খুব বেশি জানি এবং খুব কম রেফারেন্স / লিঙ্ক দেয়।
শারিলহোহমান

5

আপনি যদি পুনঃনির্দেশগুলি তৈরি করে থাকেন তবে ব্রাউজারের ক্যাচিংয়ের সমস্যা এড়াতে কার্ল দিয়ে পরীক্ষা করুন । শুধুমাত্র HTTP শিরোনাম আনতে -I ব্যবহার করুন। সমস্ত পুনঃনির্দেশগুলি অনুসরণ করতে -L ব্যবহার করুন।


3

আমার মোড_উইরাইট সমস্যাগুলি ডিবাগ করার চেষ্টা করার সময় আমি এই প্রশ্নটি পেয়েছি এবং এতে অবশ্যই কিছু সহায়ক পরামর্শ রয়েছে। তবে শেষ পর্যন্ত সবচেয়ে গুরুত্বপূর্ণ বিষয়টি নিশ্চিত করা আপনার নিজের রেজেক্সের সিনট্যাক্সটি সঠিক have আমার নিজস্ব আর সিনট্যাক্স নিয়ে সমস্যার কারণে, regexpCheck.php স্ক্রিপ্টটি ইনস্টল করা একটি কার্যকর বিকল্প ছিল না।

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

কেবল আপনার নিয়মিত প্রকাশ এবং এক বা একাধিক উদাহরণ ইউআরএল টাইপ করুন এবং এটি আপনাকে বলবে যে রেজেক্স মিলছে ("~ =" কলামের "1") এবং যদি প্রযোজ্য হয় তবে কোনও মিলিত গোষ্ঠী ("বিভাজন" এর মধ্যে সংখ্যাগুলি) কলামটি প্রতিটি URL এর জন্য অ্যাপাচি প্রত্যাশিত সংখ্যার সাথে মিল রাখে, যেমন $ 1, $ 2 ইত্যাদি) URL তারা দাবি করে যে পিসিআরই সমর্থন "বিটাতে" রয়েছে, তবে আমার সিনট্যাক্স সমস্যাগুলি সমাধান করার জন্য এটি আমার প্রয়োজন ছিল।

http://www.regexplanet.com/advanced/perl/index.html

আমি সহজভাবে একটি বিদ্যমান উত্তরে একটি মন্তব্য যুক্ত করতে পারতাম তবে আমার খ্যাতি এখনও সেই স্তরে নেই। আশা করি এটি কাউকে সাহায্য করবে।


দুর্দান্ত সরঞ্জাম, তবে ভয়ঙ্কর ফর্ম ... এই শীতল সরঞ্জামগুলি দেখুন: regex101.com বা refiddle.com বা regexr.com
hexerei সফ্টওয়্যার

3

৪. সম্পর্কিত, আপনার এখনও নিশ্চিত করতে হবে যে আপনার "ডামি স্ক্রিপ্ট স্টাব" আসলে সমস্ত পুনর্লিখন শেষ হওয়ার পরে লক্ষ্য ইউআরএল, বা আপনি কিছুই দেখতে পাবেন না!

একটি অনুরূপ / সম্পর্কিত কৌশল ( এই প্রশ্নটি দেখুন ) একটি অস্থায়ী নিয়ম প্রবেশ করানো যেমন:

RewriteRule (.*) /show.php?url=$1 [END]

কোথায় show.phpকিছু খুব সহজ স্ক্রিপ্ট শুধু প্রদর্শন করা হয় তার$_GET পরামিতিগুলি (আপনি যদি চান পরিবেশের ভেরিয়েবলগুলিও প্রদর্শন করতে পারেন)।

এটি কোনও ডিবাগারের ব্রেক-পয়েন্টের পরিবর্তে রুলসেটে আপনি সন্নিবেশ করানো বিন্দুতে পুনরায় লেখার কাজ বন্ধ করে দেবে।

আপনি Apache <2.3.9 ব্যবহার করেন, তাহলে আপনি ব্যবহার করতে হবে [L]বরং [END], এবং আপনি পারে তারপর যোগ করা প্রয়োজন:

RewriteRule ^show.php$ - [L]

আপনার রুলসেটের একেবারে শীর্ষে, যদি URL /show.phpটি নিজেই আবার লিখিত হয় being


3

কিছু ভুল আমি লক্ষ্য করেছিলাম লেখার সময় ঘটে .htaccess

এর ব্যবহার ^(.*)$, একাধিক নিয়ম বারেবারে মনোসংযোগের ব্যবহার^(.*)$ অন্যান্য নিয়মগুলি বেশিরভাগ ক্ষেত্রে নপুংসক হওয়ার কারণ হিসাবে এটি সমস্ত ইউআরএল একক হিটের সাথে মেলে।

সুতরাং, যদি আমরা এই URL এর জন্য নিয়ম ব্যবহার করছেন sapmle/urlতা এই URL গ্রাস করবে sapmle/url/string


[L] আমাদের বিধি প্রক্রিয়াজাতকরণ হয়েছে তা নিশ্চিত করতে পতাকা ব্যবহার করা উচিত।


সম্পর্কে জানা উচিত:

% N এবং $ n এর মধ্যে পার্থক্য

%n%{RewriteCond}অংশের সাথে মিলে যায় এবং অংশে $nমিল রয়েছে %{RewriteRule}

রাইরাইটবেস এর কাজ

রিউরাইটবেস নির্দেশিকা প্রতি ডিরেক্টরি (htaccess) ব্যবহার করার জন্য ইউআরএল উপসর্গ নির্দিষ্ট করে (আপত্তিজনক) পুনর্লিখন নিয়ম যেটি কোনও আপেক্ষিক পথের বিকল্প দেয়।

নিম্নলিখিত নির্দেশাবলীর কোনওটি সত্য না হলে আপনি যখন প্রতি ডিরেক্টরি (এইচটিসিএক্স) প্রসঙ্গে বিকল্পের ক্ষেত্রে কোনও আপেক্ষিক পথ ব্যবহার করেন তখন এই নির্দেশিকাটির প্রয়োজন হয়:

মূল অনুরোধ এবং প্রতিস্থাপনটি ডকুমেন্ট রুটের নীচে রয়েছে (যেমন অন্য উপায়ে যেমন এলিয়াসের মাধ্যমে পৌঁছনোর বিপরীতে)। RewritRule সম্বলিত ডিরেক্টরিটিতে ফাইল সিস্টেমের পাথ, যা আপেক্ষিক প্রতিস্থাপন দ্বারা প্রত্যয়যুক্ত সার্ভারের ইউআরএল পাথ হিসাবে বৈধ ((এটি বিরল)। অ্যাপাচি এইচটিটিপি সার্ভার ২.৪.১, এবং তারপরে, অনুরোধটি আলিয়া বা মোড_উজারডিরের মাধ্যমে ম্যাপ করা হলে এই নির্দেশকে বাদ দেওয়া যেতে পারে।


2

আপনি যদি .htacesss এ নিয়মের এক লাইন এর বেশি লেখার পরিকল্পনা করছেন,
করছেন, তবে এটির ডিবাগ করার জন্য হট-ফিক্স পদ্ধতিগুলির মধ্যে একটি চেষ্টা করার কথা ভাবেন না।

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

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


পাপো, আমি আমার ডেভলপমেন্ট স্ট্রাকচারের মধ্যে ডেডিকেটেড সার্ভারগুলি, আইএসপি-হোস্ট করা ভিপিএস এবং প্রাইভেট ভিএমগুলি চালিয়েছি, তবে আমি এখনও আমার সার্বজনীন ডোমেন এবং ইমেলের জন্য একটি শেয়ার্ড হোস্টিং পরিষেবা ব্যবহার করি, কেবলমাত্র এটি পুরোপুরি পরিচালিত ব্যবহারের জন্য আরও সুবিধাজনক এবং ব্যয়বহুল কারণে because এই জন্য পরিষেবা। এই উপায়টি কীভাবে ভাগ করা পরিষেবা ব্যবহারকারীদের লক্ষ্য করা যায়? একটি ব্যক্তিগত ভিএম একটি ভাগ করা পরিষেবা সম্পূর্ণরূপে আয়না করতে কনফিগার করা কঠিন is হ্যাঁ, আপনি যদি তখন কোনও পরীক্ষা ভিএম ব্যবহার করে সহায়তা করতে পারেন তবে আমি এখনও এই "কৌশলগুলি" সময়ে সময়ে আমার ভাগ করে নেওয়া পরিষেবাদিতে ব্যবহার করি।
টেরি

1
আমি এটির সাথে একমত হব যদি আপনার এটিকে ডিবাগিংয়ের mod_rewriteনিয়মগুলির বিকল্প পরামর্শ হিসাবে তৈরি করা হত তবে "এটি সম্পর্কে চিন্তাও করবেন না" খোলার বিষয়টি বেসিক শেয়ার্ড সার্ভিস ব্যবহারকারীদের জন্য কেবল খারাপ পরামর্শ যা তাদের htaccessফাইলগুলি কেন অচেনা রয়েছে বুঝতে ' তারা যেভাবে কাজ করে সেভাবে কাজ করে না।
টেরি

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

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

1
দুঃখিত, পাপো, তবে আমার ভোট -১ এর কারণ হ'ল আমি মনে করি যে এই "এটি সম্পর্কেও ভাবেন না" খারাপ পরামর্শ, আইএমও। যদি আপনার বক্তব্যটি ছিল "একটি নির্দিষ্ট জটিলতার aboveর্ধ্বে, তবে আপনার .htaccessফাইলগুলি ডিবাগ করার জন্য স্থানীয় অ্যাপাচি পরিষেবা ইনস্টল করা আপনার পক্ষে সহজতর হতে পারে " তবে এটি আরও ভারসাম্যযুক্ত। হ্যাঁ, স্থানীয় অ্যাপাচি পরিষেবা সেট আপ করা যুক্তিসঙ্গতভাবে সহজ, তবে কোনও পরিষেবা সরবরাহকারীর ভাগ করে নেওয়া হোস্টিং পরিষেবাটি প্রতিফলিত করা এটি জটিল হতে পারে এবং অনেক ব্যবহারকারী যারা দক্ষতার চেয়ে মাত্র ওয়ার্ডপ্রেসের এক-ক্লিকের সেটআপ ব্যবহার করেছেন তাদের দক্ষতার স্তর ছাড়িয়ে, বলুন এবং তাদের .htaccessফাইল নিয়ে সমস্যা আছে ।
টেরি

1

আমি এটি এখানে রেখে দেব, সম্ভবত সুস্পষ্ট বিস্তারিত, তবে আমাকে কয়েক ঘন্টা ধরে মাথা বেঁধে পেয়েছে : সাবধানতা অবলম্বন করুন %{REQUEST_URI}কারণ @ ক্রিস্ট ভ্যান বেসিয়েন তার উত্তরে যা বলেছে তা পুরোপুরি সঠিক, তবে রিক্যুয়েসউউরি স্ট্রিংয়ের জন্য নয় , কারণ এটি প্রকাশিত হয়েছে টেস্টস্ট্রিং এ দিয়ে শুরু হয় /। সুতরাং যত্ন নিও:

RewriteCond %{REQUEST_URI} ^/assets/$  
                            ^
                            | check this pesky fella right here if missing

0

(করণীয় ধারণার অনুরূপ) কী মিলছে তা দেখানোর জন্য, আমি এই কোডটি ব্যবহার করি

$keys = array_keys($_GET);
foreach($keys as $i=>$key){
    echo "$i => $key <br>";
}

সার্ভারের মূলের r.php এ এটি সংরক্ষণ করুন এবং তারপরে .htaccess
এ কিছু পরীক্ষা করুন উদাহরণস্বরূপ, আমি ইউআরএলগুলির সাথে মিল রাখতে চাই যা কোনও ভাষা উপসর্গ দিয়ে শুরু হয় না match

RewriteRule ^(?!(en|de)/)(.*)$ /r.php?$1&$2 [L] #$1&$2&...
RewriteRule ^(.*)$ /r.php?nomatch [L] #report nomatch and exit

1
আমি আমার ও / পি এর পয়েন্ট 4 এ উল্লিখিত হিসাবে কেবল একটি phpinfo () স্টাব ব্যবহার করে মূলত একই জিনিসটি করে। সন্ধান করুনQUERY_STRING
টেরি

0

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


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