अपाचे mod_rewrite को कैसे डीबग करें


171

मुझे mod_rewrite से दो मुख्य समस्याएं हैं:

1) जब मेरे पास कोई अमान्य नियम है, तो कोई सार्थक त्रुटि नहीं है

यहां छवि विवरण दर्ज करें

2) प्रत्येक संशोधन का मज़बूती से परीक्षण करने के लिए, मुझे क्रोम के कैश को मिटाना होगा। यह रॉकेट साइंस नहीं है, लेकिन मुझे Ctrl + Shift + Delete को हिट करना है फिर ओके पर क्लिक करें, फिर विंडो को बंद करें, और फिर से लोड करें।

मैं देखना चाहता हूं कि क्या कोई गुरु अपने रहस्यों को कुशलता से mod_rewrite कोड को प्रबंधित करने के लिए साझा करने के लिए तैयार हैं।


1
Puk, देखें stackoverflow.com/questions/9153262/… जहाँ मैं कुछ स्टैनबर्ड ट्रिक्स के बारे में चर्चा करता हूँ।
टेरी

जवाबों:


283

एक चाल फिर से लिखना लॉग को चालू करना है। इसे चालू करने के लिए, अपने अपाचे मुख्य कॉन्फ़िगरेशन या वर्तमान वर्चुअल होस्ट फ़ाइल ( इन नहीं.htaccess ) में इन पंक्तियों को आज़माएँ :

RewriteEngine On
RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3

चूंकि Apache httpd 2.4 mod_rewrite RewriteLog और RewriteLogLevel निर्देशों को पूरी तरह से नए प्रति-मॉड्यूल लॉगिंग कॉन्फ़िगरेशन द्वारा बदल दिया गया है।

LogLevel alert rewrite:trace6

81
आप इसे .htaccess में नहीं डाल सकते। आपको इसे VirtualHost कॉन्फ़िगरेशन में रखना होगा।
अत्तिला सेसेरेमी

7
आपको RewriteEngine Onवहां भी अनुभाग रखना होगा क्योंकि यदि आप इसे केवल .htaccessफ़ाइल में सक्षम करते हैं (जैसा कि मैंने किया है) , तो कुछ भी लॉग नहीं किया जाएगा।
चाचम

12
Apache 2.4 में लॉग फ़ाइल कहाँ स्थित है?
चार्ल्स जॉन थॉम्पसन III

4
आपको प्रासंगिक त्रुटि लॉग में 2.4 लॉग आइटम मिलेंगे। यह आपके कॉन्फ़िगरेशन पर निर्भर हो सकता है, लेकिन डिफ़ॉल्ट डेबियन / उबंटू सेटअप उन्हें /var/log/apache2/error.log में है
जोशिया

10
प्रो टिप: अपने रीराइटिंग लॉगिंग को बंद करना याद रखें। यदि आप भूल जाते हैं कि आप अपनी हार्ड डिस्क को तुरंत, विशेष रूप से प्रोडक्शन सर्वर पर भर देंगे।
जॉन हंट

132

LogRewrite निर्देश के रूप में बेन द्वारा उल्लेख अब अपाचे 2.4 में उपलब्ध नहीं है। आपको इसके बजाय LogLevel निर्देश का उपयोग करने की आवश्यकता है। उदाहरण के लिए

LogLevel alert rewrite:trace6

Http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#log देखें


22
लॉग फ़ाइल इससे संबंधित कहाँ है?
चार्ल्स जॉन थॉम्पसन III

8
@CharlesJohnThompsonIII - लॉगफ़ाइल त्रुटि लॉग है (ErrorLog निर्देश द्वारा निर्दिष्ट)। डॉक्स के अनुसार, आप grep के साथ सिर्फ रीराइट संदेश प्राप्त कर सकते हैं:tail -f error_log|fgrep '[rewrite:'
billynoah

1
अपाचे को फिर से शुरू करने के लिए मत भूलना
लेखाकार

1
मुझे यह सुनिश्चित करना AllowOverrideथा कि मुझे सेट करना है All!
माइकल

25

मूल URL रिज़ॉल्यूशन के लिए, कमांड ब्राउज़र का उपयोग करें wgetया curlमैन्युअल ब्राउज़र के बजाय परीक्षण करने के लिए करें। फिर आपको कोई कैश साफ़ नहीं करना है; अपने परीक्षण गानों को फिर से चलाने के लिए बस ऊपर तीर और एक खोल में दर्ज करें।


14
एक और चाल क्रोम "पोर्न मोड" (सीटीएल + शिफ्ट + एन) का उपयोग करना है। जब आप विंडो बंद करते हैं, तो किसी भी कैश्ड सत्र संदर्भ को ट्रैश किया जाता है।
टेरी

मुझे लगता है कि फ़ायरफ़ॉक्स का "निजी सत्र" ब्राउज़िंग भी। लेकिन क्या आप यह कह रहे हैं कि यह संदर्भ व्यक्तिगत विंडो के अनुसार है (इसलिए आप Chrome को बंद नहीं कर रहे हैं?)
Kaz

2
AFAIK, Chrome और Ff इस बात में भिन्न हैं कि Ff एक एकल प्रक्रिया के रूप में चलती है जो निजी मोड में है या नहीं। क्रोम के साथ, प्रत्येक टैब या विंडो एक अलग प्रक्रिया के रूप में चलती है और निजी मोड में व्यक्तिगत रूप से हो सकती है; एक निजी विंडो / टैब बंद करें और यह संदर्भ ट्रैश हो गया है।
टेरी

1
एफबी के लिए प्राइवेटटैब एडऑन बात करता है। प्रत्येक टैब व्यक्तिगत रूप से काम करता है।
जावेद

यह विधि पुनर्निर्देश भी दिखाती है! किसी ऐसे व्यक्ति के लिए अच्छा है जिसके पास मशीन अपाचे कॉन्फिगर फाइल तक पहुंच नहीं है।
ज्योफ सावे

14

नहीं है इनको परीक्षक

यह दिखाता है कि एक निश्चित URL के लिए किन परिस्थितियों का परीक्षण किया गया, किन मानदंडों को पूरा किया गया और किन नियमों को क्रियान्वित किया गया।

यह कुछ glitches है, हालांकि लगता है।


2
मेरे लिए इसने बिना किसी कोड के अंतिम पंक्ति में एक हरे रंग का निष्पादित नियम दिखाया।
एंडी

@thombr क्या आप अधिक सटीक हो सकते हैं, कृपया? यह लिंक काम नहीं करता? या उपकरण? क्या वास्तव में काम नहीं करता है? और इस प्रश्न के संदर्भ में यह प्रासंगिक क्यों है?
एंडी

1
यह मुझे बताता है कि URL अपेक्षा के अनुरूप रूपांतरित हो रहा है ... हालाँकि वास्तविक सर्वर पर मुझे एक 404 मिल रहा है
माइकल

@michael का परीक्षण आपके विन्यास में मौजूद एकमात्र नियम है? क्या mod_rewrite वास्तव में स्थापित और सक्रिय है?
एंडी

ओवरराइड्स टर्न आउट सक्षम नहीं थे
माइकल

3

बेन के जवाब के आधार पर आप लिनक्स (मेरे मामले में डेबियन) पर अपाचे चलाते समय निम्नलिखित कर सकते हैं।

सबसे पहले फ़ाइल को फिर से बनाएँ- log.load

/etc/apache2/mods-availabe/rewrite-log.load

RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3

फिर दर्ज करें

$ a2enmod फिर से लॉग-इन करें

के बाद

$ सेवा Apache2 पुनरारंभ

और जब आप अपने रीराइट नियमों को डीबग करना समाप्त कर देते हैं

$ a2dismod फिर से लिखना-लॉग और& सेवा apache2 पुनरारंभ करें


यह काम नहीं किया। मुझे सैंडिनो @ ईर्ष्या मिलती है: ~ $ sudo service apache2 पुनरारंभ * वेब सर्वर apache2 को पुनरारंभ करना [विफल] * apache2 configtest विफल। विन्यास परीक्षण का आउटपुट था: AH00526: /etc/apache2/mods-enabled/rewrite-log.load की पंक्ति 1 पर सिंटैक्स त्रुटि: अमान्य आदेश 'RewriteLog', शायद एक सर्वर द्वारा
संकलित

3
@ सांडिनो, आप कौन सा अपाचे संस्करण चला रहे हैं? ऐसा लगता है कि इस वाक्यविन्यास को 2.4 के लिए बदल दिया गया था, इसके बजाय का उपयोग करें: LogLevel warn rewrite:trace8या LogLevel info rewrite:trace8जहां 8 1-8 से कोई भी संख्या हो सकती है
इंसनेर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.