2010-07-15 11 views
6

अगर मैं DirectorySlash Off फ़ाइल में DirectorySlash Off सेट करता हूं और निर्देशिका को के बिना कॉलिंग स्लैश को कॉल करता हूं तो मुझे अपने सर्वर से 403-Forbidden मिलता है। अगर मैं इसे स्लैश के साथ बुलाता हूं तो सब कुछ ठीक काम करता है।अपाचे निर्देशिका स्लैश ऑफ - साइट ब्रेक

क्या कोई समझा सकता है क्यों? यहां मेरा पूरी तरह से अनामित .htaccess है:

# GLOBAL CONFIG 
Options +FollowSymlinks 
DirectorySlash Off 
AddDefaultCharset utf-8 
php_value post_max_size 256M 
php_value upload_max_filesize 256M 

# BEGIN WordPress 
RewriteEngine On 
RewriteBase /folder/ 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /folder/index.php [L] 
# END WordPress 

# REMOVE WWW 
RewriteCond %{HTTP_HOST} ^([^.]+)\.domain\.com$ [NC] 
RewriteRule ^(.*)$ http://domain.com$1 [R=301,L] 

उत्तर

11

आप प्रलेखन प्रति जानते हैं, जब DirectorySlashOff के लिए सेट है, /folder करने के लिए अनुरोध DirectoryIndex का मूल्यांकन नहीं है। इसका मतलब है कि अनुरोध स्वचालित रूप से /folder/index.php पर मैप नहीं किया जाएगा।

mod_dir अनुरोध प्रक्रिया के "फिक्सअप" चरण में इस चेक को निष्पादित करता है। mod_rewrite, जो आपके RewriteRule परिभाषाओं के लिए ज़िम्मेदार है, यह भी इस चरण में अपनी प्रसंस्करण करता है जब आप .htaccess फ़ाइल में नियम निर्दिष्ट करते हैं।

हालांकि, इसे mod_dir जैसे मॉड्यूल के बारे में जागरूकता के साथ प्रोग्राम किया गया था, और यह सुनिश्चित करने के लिए एक जांच भी शामिल है कि वर्तमान निर्देशिका को पिछला स्लैश के साथ अनुरोध किया गया था। यदि नहीं, तो यह अनुरोध को संभालने में गिरावट आती है, क्योंकि ऐसा करने से अपरिभाषित व्यवहार हो सकता है।

अनुरोध तब सामग्री-पीढ़ी चरण पर चलता है, क्योंकि अनुरोध वास्तविक फ़ाइल में मैप नहीं किया गया था, mod_autoindex द्वारा संभाला जाता है। यह देखते हुए कि Indexes डिफ़ॉल्ट रूप से आपके होस्ट पर अक्षम हैं, mod_autoindex403 Forbidden देता है जो आप देखते हैं।

ध्यान दें कि DirectoryIndex के बाद से मूल्यांकन किया जाता है नहीं है, भले ही mod_rewriteथे अनुरोध पर कार्रवाई करने, यह अभी भी, विफल हो जाएगा क्योंकि index.php करने के लिए कोई स्वत: संकल्प घटित होता है, और अपने नियम

RewriteRule . /folder/index.php [L] 

wouldn ' टी मैच, क्योंकि . को किसी चीज़ पर एक मैच की आवश्यकता है (लेकिन अनुरोध खाली होगा)।

DirectorySlash को सक्षम करने से पिछले टिप्पणी है, जो तथ्य यह है कि DirectoryIndex वैसे भी index.php करने के लिए अनुरोध नक्शे द्वारा ध्यान रखा जाता है को छोड़कर जैसा कि पहले उल्लेख परिदृश्यों के सभी में रोका कार्यों को सही करने से इस परिदृश्य से बचाता है।

+0

बहुत बहुत धन्यवाद! अगर मैं आपका जवाब पढ़ूं तो भी समझना आसान है। – gearsdigital

+0

लेकिन अगर हम अपनी निर्देशिका संरचना को खराब करना चाहते हैं और अभी भी प्रत्येक अनुरोध के लिए 'mod_rewrite' का उपयोग करना चाहते हैं? मान लें कि मेरे पास एक 'निजी' निर्देशिका वाली साइट है। अगर मैं 'निजीकरण 'का अनुरोध करता हूं तो अपाचे मुझे'/private/'पर रीडायरेक्ट करेगा, अगर' डायरेक्टरी स्लैश 'चालू है, इस प्रकार सूचना प्रकटीकरण को लेने के लिए। अगर मैं सिर्फ अपने सूचकांक में' निजी 'भेजना चाहता हूं। PHP 'फ्रंट नियंत्रक? – tonix

2

मुझे लगता है कि क्योंकि जब आप DirectorySlash बंद कर देते हैं, यह यूआरएल समय स्वत: सुधार अक्षम करें और यह निर्देशिका सूची दिखाने के लिए कोशिश कर रहा है लेकिन सौभाग्य से आप शायद इस कहीं निष्क्रिय कर दिया है (या में फ़ाइल अनुमतियां) तो यह 403-निषिद्ध भेजता है। मुझे लगता है कि जब आप इसे चालू करते हैं, तो यह सामान्य रूप से काम करता है। जो मैं दस्तावेज़ों से समझता हूं, उससे सुरक्षा के लिए DirectorySlash बंद करना बहुत अच्छा नहीं है। http://httpd.apache.org/docs/2.1/mod/mod_dir.html

+0

लॉरेंट देखें आपका जवाब के लिए धन्यवाद। मैंने अपाचे दस्तावेज़ों में ** सुरक्षा चेतावनी ** भी पढ़ा है लेकिन मुझे यह समझने की आवश्यकता है कि यहां क्या गलत हुआ। जिस तरह से निर्देशिका सूची मेरे वेबहोस्ट बैकएंड पर प्रति डिफ़ॉल्ट अक्षम है। – gearsdigital

+0

आप पुनः लिखना चाहते हैं/फ़ोल्डर/'तो आपको मिलान करने के लिए यूआरएल पर अंतिम स्लैश की आवश्यकता है। आप इसे 'फ़ोल्डर' पर सेट कर सकते हैं और मुझे लगता है कि इसे अंत स्लैश के बिना काम करना चाहिए। – laurent

+0

यदि मैं आपके सुझाव का पालन करता हूं तो मुझे 403 भी मिलते हैं। – gearsdigital

8

अपाचे 2.4 के साथ आप RewriteOptions AllowNoSlash सेट करके .htaccess फ़ाइलों में पुनः लिखने की अनुमति दे सकते हैं।

Changes with Apache 2.3.16 
... 
*) mod_rewrite: Add the AllowNoSlash RewriteOption, which makes it possible 
    for RewriteRules to be placed in .htaccess files that match the directory 
    with no trailing slash. PR 48304. 
    [Matthew Byng-Maddick <matthew byng-maddick bbc.co.uk>] 
... 

, Apache documentation of mod_rewrite

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