डीबग कैसे करें ।htaccess RewriteRule काम नहीं कर रहा है


115

मैं एक है RewriteRuleएक में .htaccessफ़ाइल है कि कुछ भी नहीं कर रही है। मैं इसका निवारण कैसे करूँ?

  • यदि .htaccessApache द्वारा फ़ाइल को पढ़ा और पालन किया जा रहा है तो मैं कैसे सत्यापित कर सकता हूं ? क्या मैं एक गूंज "यह काम कर रहा है" संदेश लिख सकता है, अगर मैं इसे लिखता हूं, तो उस पंक्ति को कहां से प्रतिध्वनित किया जाएगा?
  • यदि .htaccessफ़ाइल का उपयोग नहीं किया जा रहा है, तो मैं अपाचे का उपयोग कैसे कर सकता हूं?
  • यदि .htaccessउपयोग किया जा रहा है, लेकिन मेरा RewriteRuleअभी भी प्रभाव नहीं हो रहा है, तो मैं डिबग करने के लिए और क्या कर सकता हूं?

जवाबों:


144

अपने जंक मूल्य में कुछ दर्ज करें , .htaccess जैसे कि कोई भी htaccess द्वारा पहचाना नहीं गया है और आपके URL पर जाएँ। यदि यह काम कर रहा है, तो आपको एfoo barsakjnaskljdnas

500 आंतरिक सर्वर त्रुटि

आंतरिक सर्वर त्रुटि

सर्वर को एक आंतरिक त्रुटि या ग़लतफ़हमी का सामना करना पड़ा और आपके अनुरोध को पूरा करने में असमर्थ था ...।

मेरा सुझाव है कि आप इसे जल्द ही डाल दें RewriteEngine on


चूंकि आप अपनी मशीन पर हैं। मुझे लगता है कि आपके पास अपाचे .confफ़ाइल तक पहुंच है ।

.confफ़ाइल खोलें , और इसके समान एक लाइन देखें:

LoadModule rewrite_module modules/mod_rewrite.so

यदि यह टिप्पणी की जाती है (#), अपाचेपन और पुनः आरंभ अपाचे।


फिर से लिखना है

RewriteEngine On
RewriteLog "/path/to/rewrite.log"
RewriteLogLevel 9

उपरोक्त 3 पंक्तियाँ अपने में रखें virtualhost। httpd को पुनरारंभ करें।

RewriteLogLevel 9स्तर के लिए एक उच्च मूल्य का उपयोग नाटकीय रूप से आपके अपाचे सर्वर को धीमा कर देगा! केवल डीबगिंग के लिए 2 से अधिक स्तर पर पुनर्लेखन लॉगफ़ाइल का उपयोग करें! लेवल 9 लगभग हर रीराइटिटेलॉग विवरण को लॉग करेगा।


अपडेट करें

अपाचे 2.4 में चीजें बदल गई हैं:

2.4 से अपग्रेड करने के लिए 2.2 से

RewriteLog और RewriteLogLevel निर्देशों हटा दिया गया है। यह कार्यक्षमता अब LogLevel निर्देश का उपयोग करके mod_rewrite मॉड्यूल के लिए लॉगिंग के उचित स्तर को कॉन्फ़िगर करके प्रदान की गई है । Mod_rewrite लॉगिंग अनुभाग भी देखें।

LogLevel पर अधिक के लिए, LogLevel निर्देश देखें

आप पूरा कर सकते हैं

RewriteLog "/path/to/rewrite.log"

अब इस तरीके से

LogLevel debug rewrite_module:debug

ठीक है, इसलिए समस्या यह है, मैं .htaccess फ़ाइल में एक rewriterule जोड़ने की कोशिश कर रहा हूं, और किसी कारण से इसका उपयोग नहीं कर रहा हूं।
मैका

@ उक्त विधि को आजमाएं। यदि आपको एक आंतरिक सर्वर त्रुटि मिलती है, तो इसका मतलब है कि mod_rewrite (.htaccess) सक्षम है। क्या आप एक साझा होस्ट पर हैं?
सोच रहा था

नहीं, मैं अपने लोकलहोस्ट पर काम कर रहा हूं, क्या आपको पता है कि .htaccess फ़ाइल लोड कब होती है? हालांकि मैं अपाचे इसे पहली बार
पढ़ूंगा

@ मच .htaccess फाइलें कभी लोड नहीं होती हैं। जब आप उस फ़ोल्डर में मौजूद किसी पृष्ठ पर पहुंचने का प्रयास करते हैं, तो वे अपाचे द्वारा एक्सेस किए जाते हैं (यदि मौजूद हैं)।
सोच रहा था

ठीक है मेरा सवाल था, अगर कोई किसी वेबपेज के लिए अनुरोध करता है, तो क्या अपाचे सीधे सर्वर साइड लिपियों को प्राप्त करता है या यह उस फ़ोल्डर में .htaccess फ़ाइल की तलाश करेगा और फिर आगे बढ़ेगा ??
मटका

52

'कुछ रद्दी मूल्य दर्ज करें' उत्तर ने मेरे लिए चाल नहीं चली, मेरी साइट को कबाड़ में प्रवेश करने के बावजूद लोड करना जारी था।

इसके बजाय मैंने .htaccess फ़ाइल के शीर्ष पर निम्न पंक्ति जोड़ी:

deny from all

यह जल्दी से आपको बता देगा कि .htaccess को उठाया जा रहा है या नहीं। यदि .htaccess का उपयोग किया जा रहा है, तो उस फ़ोल्डर की फाइलें लोड नहीं होंगी।


4
यह सबसे सरल परीक्षण है अगर आपको सत्यापित करते समय कुछ सेकंड के लिए काम करने में कोई आपत्ति नहीं है।
मॉर्डर्ड

1
हां - मुझे यह सत्यापित करने में लगभग एक सेकंड का समय लगा कि जिस साइट पर मैं काम कर रहा था वह .htaccess फ़ाइलों का उपयोग नहीं कर रही थी।
bon

1
धन्यवाद, एक आकर्षण की तरह काम करता है :) मुझे कुछ समय डिबगिंग बचा लिया!
Martijn van Hoof

32

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

<Directory ..>
    ...
    AllowOverride None
    ...
</Directory>

को बदलना चाहिए

AllowOverride All

और आप .htaccess फ़ाइलों में निर्देशों को बदल सकेंगे।


धन्यवाद। मुझे मुख्य apache2.conf फाइल में डायरेक्टरी ट्री / var / www के लिए प्रासंगिक अनुभाग मिला
टिम रिचर्डसन

6

शायद एक अधिक तार्किक विधि एक फ़ाइल बनाने के लिए होगी (उदाहरण के लिए test.html), कुछ सामग्री जोड़ें और फिर इसे इंडेक्स पेज के रूप में सेट करने का प्रयास करें:

DirectoryIndex test.html

अधिकांश भाग के लिए, .htaccess नियम Apache कॉन्फ़िगरेशन को ओवरराइड करेगा जहाँ निर्देशिका / फ़ाइल स्तर पर काम कर रहा है


4

पूछे गए तीन के पहले प्रश्न का उत्तर देने के लिए, .htaccess फ़ाइल काम कर रही है या नहीं यह देखने का एक सरल तरीका है ।htaccess फ़ाइल के शीर्ष पर एक कस्टम त्रुटि को ट्रिगर करना है:

ErrorDocument 200 "Hello. This is your .htaccess file talking."
RewriteRule ^ - [L,R=200]

आपके दूसरे प्रश्न पर, यदि .htaccess फ़ाइल को पढ़ा नहीं जा रहा है, तो संभव है कि सर्वर का मुख्य Apache कॉन्फ़िगरेशन AllowOverrideसेट हो गया हो None। अपाचे के प्रलेखन में समस्या निवारण युक्तियाँ हैं और अन्य मामलों के लिए हैं जो .htaccess को प्रभावी होने से रोक सकती हैं।

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

वेरिएबल का आउटपुट आप यह सुनिश्चित करने के लिए कर रहे हैं कि इसमें वह मूल्य है जिसकी आप अपेक्षा कर रहे हैं:

ErrorDocument 200 "Request: %{THE_REQUEST} Referrer: %{HTTP_REFERER} Host: %{HTTP_HOST}"
RewriteRule ^ - [L,R=200]

अभिव्यक्ति को स्वतंत्र रूप से एक <If>निर्देश में रखकर परीक्षण करें । इससे आप यह सुनिश्चित कर सकते हैं कि जब आप इसकी अपेक्षा करते हैं तो आपकी अभिव्यक्ति ठीक से लिखी या मेल खाती है:

<If "%{REQUEST_URI} =~ /word$/">
    ErrorDocument 200 "Your expression is priceless!"
    RewriteRule ^ - [L,R=200]
</If>

हैप्पी .htaccess डिबगिंग!


3

यदि आपके पास अपाचे बिन निर्देशिका तक पहुंच है, तो आप इसका उपयोग कर सकते हैं,

httpd -M पहले लोड किए गए मॉड्यूल की जांच करने के लिए।

 info_module (shared)
 isapi_module (shared)
 log_config_module (shared)
 cache_disk_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 proxy_module (shared)
 proxy_ajp_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 socache_shmcb_module (shared)
 ssl_module (shared)
 status_module (shared)
 version_module (shared)
 php5_module (shared)

उसके बाद सरल निर्देश जैसे कि Options -Indexesया deny from allउसको ठोस करेंगे। सही तरीके से काम कर रहे हैं।


1

अपने htaccess को फिर से लिखने के नियमों का परीक्षण करने के लिए, उस url को भरें जिसमें आप नियमों को लागू कर रहे हैं, अपने htaccess की सामग्री को बड़े इनपुट क्षेत्र पर रखें और "Test" बटन दबाएं।

http://htaccess.mwl.be/


-1

अपनी .htaccess फ़ाइल में कुछ रद्दी क्यों न डालें और अपाचे को फिर से लोड करने की कोशिश करें। यदि अपाचे शुरू करने में विफल रहता है, तो आप इसके काम को जानते हैं। यदि यह आपके द्वारा कॉन्फ़िगर किए गए बधाई को लोड करता है तो रद्दी को फिर से लोड करें।


7
मुझे नहीं लगता कि अपाचे शुरू या चलाने में विफल होगा यदि कोई खराब .htaccess है, तो यह देखते हुए कि यह तब तक चेक नहीं करता है। जब तक कि पेज अनुरोध नहीं होता है।
एंड्रयू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.