htaccess निष्पादन आदेश और प्राथमिकता


19

क्या कोई मुझे बता सकता है कि अपाचे किस क्रम में लागू होता है। एक ही पथ के विभिन्न स्तरों में रहने वाली .access फाइलें और उसमें फिर से लिखे गए नियमों को कैसे प्राथमिकता दी जाती है?

उदाहरण के लिए, काम के पहले .htaccess में पुनर्लेखन नियम क्यों नहीं है और क्या /blogप्राथमिकता में है?

.htaccess में /

RewriteEngine on
RewriteBase /
RewriteRule ^blog offline.html [L]

.htaccess में /blog

RewriteEngine On
RewriteBase /blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]

पुनश्च: मैं बस एक जवाब की तलाश में नहीं हूँ, लेकिन अपाचे / mod_rewrite आंतरिक को समझने के लिए एक तरीका है ... मुझे यह तय करने की तुलना में अधिक महत्वपूर्ण क्यों है ?

जवाबों:


20

मुझे लगता है कि आपको अपाचे ट्यूटोरियल पढ़ना चाहिए : .htaccess , मुख्य रूप से अनुभाग "कैसे निर्देश लागू होते हैं", जिसमें कहा गया है:

.Htaccess फ़ाइल में पाया जाने वाला कॉन्फ़िगरेशन निर्देश उस निर्देशिका पर लागू होता है जिसमें .htaccess फ़ाइल मिलती है, और उसके बाद सभी उपनिर्देशिकाओं के लिए। हालांकि, यह भी याद रखना महत्वपूर्ण है कि उच्चतर निर्देशिकाओं में .htaccess फाइलें हो सकती हैं। निर्देशों को उस क्रम में लागू किया जाता है जो वे पाए जाते हैं। इसलिए, किसी विशेष निर्देशिका में एक .htaccess फ़ाइल में पाए गए निर्देशों को ओवरराइड कर सकते हैं .htaccess फ़ाइलों को निर्देशिका ट्री में उच्चतर पाया जाता है। और वे, बदले में, अभी तक उच्चतर या मुख्य सर्वर कॉन्फ़िगरेशन फ़ाइल में पाए गए निर्देशों को ओवरराइड कर सकते हैं।

इसे पूरा पढ़ें और .htaccess अब कोई रहस्य नहीं होगा।


7
mod_rewrite एक विशेष मामला है। पुनर्लेखन नियम नीचे लागू होते हैं। पहले उपनिर्देशिका में नियम फिर मूल निर्देशिका में नियम।
GetFree

ऊपर सूचीबद्ध डॉक अपाचे 2.2 के लिए है। अपाचे के वर्तमान संस्करण के लिए, httpd.apache.org/docs/current/howto/htaccess.html
SherylHohman

3

आप RewriteOptions inheritमूल निर्देशिका के पुनर्लेखन नियमों को प्राप्त करने के लिए उपयोग कर सकते हैं । हालाँकि, पेरेंट डायरेक्टरी के पुनर्लेखन नियमों को बाद में लागू किया जाएगा, जैसा कि रिवाइटओएशंस पर प्रलेखन के अनुसार किया गया है


1
माता-पिता की निर्देशिकाओं के लिए पुन: निर्देश को इस कथन के बिना भी लागू किया जाएगा (जो कुछ भ्रमित करने वाला है) लेकिन मुझे लगता है कि इसका उपयोग माता-पिता से बच्चे तक एक आभासी प्रतिलिपि + पेस्ट का निर्देशन करने के लिए किया जा सकता है (जिसमें अलग-अलग पुनर्लेखन आधार हो सकते हैं)। कोई आश्चर्य नहीं कि mod_rewrite कभी-कभी आपके सिर के साथ खिलवाड़ करता है ... अर्घ।
साइमन ईस्ट

2
@SimonEast "माता-पिता निर्देशिका के लिए फिर से निर्देश इस कथन के बिना भी लागू किया जाएगा" - क्या आप सुनिश्चित हैं? क्या आपके पास एक संदर्भ है? विशेष रूप से, mod_rewriteनिर्देशों को डिफ़ॉल्ट रूप से विरासत में नहीं मिला है (अन्य मॉड्यूल के लिए अलग)। विरासत में मिले निर्देशों के लिए आपको कहीं न कहीं एक RewriteOptions InheritXXXXनिर्देश की आवश्यकता होगी । हालाँकि, यह Apache 2.4+ पर अधिक जटिल हो जाता है विकल्प के साथ जो माता-पिता निर्देशिका में निर्दिष्ट किया जा सकता है और सर्वर कॉन्फ़िगरेशन जो तब बच्चे निर्देशिकाओं को नियंत्रित करता है। InheritDown
Mrhhite
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.