कई पोस्टरों में उनकी .htaccessफ़ाइलों के भीतर उनके ReriteRule और RewriteCond बयानों को डीबग करने में समस्याएं हैं । इनमें से अधिकांश साझा होस्टिंग सेवा का उपयोग कर रहे हैं और इसलिए रूट सर्वर कॉन्फ़िगरेशन तक पहुंच नहीं है। वे .htaccessपुनर्लेखन के लिए फ़ाइलों का उपयोग करने से बच नहीं सकते हैं और कई उत्तरदाताओं के सुझाव के रूप में "ReRiteLogLevel" को सक्षम नहीं कर सकते । इसके अलावा कई-कई .htaccessगंभीर नुकसान और बाधाएं अच्छी तरह से कवर नहीं की जाती हैं। स्थानीय परीक्षण की स्थापना करते हुए LAMP स्टैक में अधिकांश के लिए सीखने की अवस्था बहुत अधिक होती है। ।
इसलिए मेरा प्रश्न यहाँ है कि हम कैसे अनुशंसा करेंगे कि वे अपने नियमों को स्वयं डिबग करें । मैं नीचे कुछ सुझाव प्रदान करता हूं। अन्य सुझावों की सराहना की जाएगी।
समझें कि mod_rewrite इंजन
.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जब तक स्पष्ट रूप से बहु-स्तरीय नियमों का उपयोग करने का इरादा नहीं है, तब तक किसी भी निचले स्तर के नियम को फिर से लिखें।सुनिश्चित करें कि प्रत्येक Regexp का सिंटैक्स परीक्षण पैटर्न के एक सेट के खिलाफ परीक्षण करके सही है, यह सुनिश्चित करने के लिए कि एक वैध सिंटैक्स है और वह करता है जो आप परीक्षण URI की पूरी श्रृंखला के साथ करना चाहते हैं। देखें नीचे इस सवाल का जवाब अधिक जानकारी के लिए।
एक परीक्षण निर्देशिका में अपने नियमों को बढ़ाएँ। आप
.htaccessअपने मुख्य नियमों को खराब किए बिना और अपनी साइट को काम करने से रोकने के लिए एक अलग परीक्षण निर्देशिका (पेड़) और डिबग नियम सेट अप करने के लिए "पथ सुविधा पर सबसे गहरी फ़ाइल निष्पादित करें" का उपयोग कर सकते हैं । आपको उन्हें एक बार में जोड़ना होगा क्योंकि व्यक्तिगत नियमों में विफलताओं का स्थानीयकरण करने का यही एकमात्र तरीका है।सर्वर और पर्यावरण चर को डंप करने के लिए डमी स्क्रिप्ट स्टब का उपयोग करें । ( सूची 2 देखें ) यदि आपका ऐप कहता है,
blog/index.phpतो आप इसे कॉपी कर सकते हैंtest/blog/index.phpऔर इसका उपयोगtestउपनिर्देशिका में अपने ब्लॉग नियमों का परीक्षण करने के लिए कर सकते हैं । आप यह सुनिश्चित करने के लिए पर्यावरण चर का भी उपयोग कर सकते हैं कि प्रतिस्थापन स्ट्रिंग्स की सही ढंग से व्याख्या करने में इंजन फिर से लिखें, जैसेRewriteRule ^(.*) - [E=TEST0:%{DOCUMENT_ROOT}/blog/html_cache/$1.html]और इन REDIRECT_ * वैरिएंट्स को phpinfo डंप में देखें। BTW, मैंने इसे इस्तेमाल किया और अपनी साइट पर खोजा जो मुझे
%{ENV:DOCUMENT_ROOT_REAL}इसके बजाय उपयोग करना था। पुनर्निर्देशक लूपिंग के मामले में REDIRECT_REDIRECT_ * चर पिछले पास को सूचीबद्ध करते हैं। आदि..सुनिश्चित करें कि आपको गलत 301 रीडायरेक्ट कैशिंग द्वारा आपके ब्राउज़र द्वारा काटे नहीं जाते हैं । देखें नीचे इस सवाल का जवाब । इसके लिए उलरिक पाल्हा को मेरा धन्यवाद ।
पुनर्लेखन इंजन एक
.htaccessसंदर्भ में कैस्केड नियमों के प्रति संवेदनशील लगता है, (यहRewriteRuleएक प्रतिस्थापन में परिणाम है और यह आगे के नियमों के अनुसार गिरता है), क्योंकि मुझे आंतरिक उप-अनुरोधों (1) के साथ बग मिला , और गलत PATH_INFO प्रसंस्करण जो अक्सर हो सकता है [एनएस], [एल] और [पीटी] झंडे के उपयोग से रोकता है।
कोई और टिप्पणी या सुझाव?
लिस्टिंग 1 - phpinfo
<?php phpinfo(INFO_ENVIRONMENT|INFO_VARIABLES);