2011-10-18 13 views
6

यह "एक प्रश्न पूछें और इसे स्वयं जवाब दें" का एक मामला है, जिसे मैं किसी भी व्यक्ति के लाभ के लिए पोस्ट कर रहा हूं जिसकी एक ही समस्या है।मैं mod_rewrite नियमों को कैसे डिबग कर सकता हूं?

मुझे साझा सर्वर पर एक .htaccess फ़ाइल में mod_rewrite नियमसेट को डीबग करने में कुछ समस्याएं थीं, जहां मैं अपाचे त्रुटि लॉग तक पहुंच भी नहीं पाया।

  1. एक छोटी स्क्रिप्ट कि बस बाहर प्रिंट यह चर querystring है लिखें: मैं एक साफ रास्ता उन्हें डिबग करने के लिए है, जो इस है पाया। जैसे PHP में:

    <?='<pre>',htmlentities(print_r($_GET,true)),'</pre>'?> 
    

    आपको बस इतना चाहिए।

  2. मान लें कि आप इस स्क्रिप्ट को "show.php" नाम दें और इसे/public_html में रखें। फिर अपनी .htacces फ़ाइल में, अपने नियम-सेट में बात आपको लगता है कि समस्या का कारण हो सकता है की पहचान, और इस नियम सम्मिलित करें:

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

प्रभाव एक नियमित रूप से एक प्रिंट बयान डालने के समान ही है कार्यक्रम। यह आपको बताएगा कि (ए) आप नियम में उस बिंदु पर पहुंचे, और (बी) वर्तमान पुनर्लेखित यूआरएल क्या है।

यह वास्तविक डीबगिंग टूल के रूप में फ़्लैश नहीं है, लेकिन यह काम पूरा हो जाता है।

यदि आप अपाचे < 2.3.9 का उपयोग कर रहे हैं, तो आपको [END] के बजाय [L] का उपयोग करना होगा। उस स्थिति में, कुछ देखने के लिए यह है कि आपके नियमसेट को किसी अन्य चीज़ पर "/show.php" को फिर से लिखने का प्रयास नहीं करना चाहिए। यदि यह एक समस्या है, तो आप इसे बहुत शीर्ष पर इस नियम जोड़कर ठीक कर सकते हैं:

RewriteRule ^show.php$ - [L] 

... बस इसे दूर करने के लिए जब आप डिबगिंग प्रक्रिया पूरी कर ली याद!

+0

अधिक उपयोगी तकनीकें हैं [यहां] (http://stackoverflow.com/questions/9153262/tips-for-debugging-htaccess-rewrite-rules)। – Doin

उत्तर

4

बहुत उपयोगी जानकारी। सालों से मैं यह पता लगाने की कोशिश कर रहा हूं कि रूट पहुंच प्राप्त करने और httpd.conf में नियमों को रखने के बिना mod_rewrite नियमों को डीबग कैसे करें। यह करता है!

<?='<pre>',htmlentities(print_r($_GET),true),'</pre>'?> 

इस कोड में, print_r() stdout के लिए $ _GET में सब कुछ outputs और फिर मान सत्य है, जो htmlentities (रिटर्न) अपनी पहली के रूप में ऊपर उठाता है:

आप अपने PHP में एक नाबालिग गलती है तर्क। htmlentities() को इसके दूसरे तर्क के रूप में शाब्दिक सत्य भी प्राप्त होता है, जो एक वैकल्पिक तर्क है जो htmlentities() को एकल- और/या डबल-कोट्स के साथ गड़बड़ करना है या नहीं।

मुझे लगता है कि तुम क्या इरादा था:

<?='<pre>',htmlentities(print_r($_GET, true)),'</pre>'?> 

यह print_r बताता है() $ _GET में सब कुछ फ़ॉर्मेट करने के लिए। Print_r() के दूसरे तर्क के रूप में सच होने से यह परिणाम stdout को आउटपुट न करने के लिए कहता है, लेकिन परिणाम को स्ट्रिंग में डालने के बजाय और उस स्ट्रिंग को print_r() के वापसी मान के रूप में वापस करने के लिए कहता है।htmlentities() तब उस स्ट्रिंग को एक इनपुट पैरामीटर के रूप में प्राप्त करता है, और ब्राउजर को स्ट्रिंग को समझने के लिए ब्राउजर को स्ट्रिंग को प्रदर्शित करने के लिए मजबूर करने के लिए उचित प्रतिस्थापन करता है। E.G. -

<i>text</i> 

अनुवाद करा होगा:

&lt;i&gt;text&lt;/i&gt; 

जो ब्राउज़र प्रदर्शित करने के लिए कारण होगा:

<i>text</i> 

बजाय इटैलिक में शब्द "पाठ" को प्रदर्शित करने में:

टेक्स्ट

+0

एगाड! आप सही हे! यह अभी तय है। इसे पकड़ने के लिए धन्यवाद। – Doin

संबंधित मुद्दे