2012-11-13 12 views
8

में निर्देशिका नाम पर पिछला स्लैश जोड़ने के लिए 301 रीडायरेक्ट को कैसे अक्षम करें अपाचे 2.2.20 automaticaly उन सभी अनुरोधों को रीडायरेक्ट करता है जो निर्देशिकाओं के लिए बिंदु हैं और पीछे दिखाए गए जैसे यूआरएल पर पीछे की ओर कोई पीछे नहीं है, जैसा कि नीचे दिखाया गया है:अपाचे

GET /some/path/to/dir HTTP/1.1 
Host: www.some.org 
... 

301 Moved permanently 
Location: http://www.some.org/some/path/to/dir/ 

सभी मामलों में यह एक अच्छा व्यवहार है, लेकिन मुझे इस सुविधा को एक विशेष फ़ोल्डर (सभी के लिए नहीं) के लिए बंद करना होगा, और यह नहीं मिल सकता कि मैं इसे कर सकता हूं।

'पुनर्लेख' नियमों के लिए खोज कुछ भी नहीं मिला - केवल लोड मॉड्यूल mod_rewrite.so निर्देशित करता है। साथ ही, निर्देशिका पेड़ में निर्देशिका सर्वर में कोई। Htaccess फ़ाइलें नहीं हैं। क्या कोई अन्य निर्देश है जो चीज़ बनाते हैं?

UPD1 मैं सेट करने का प्रयास SVN गर्त HTTP अगले config के साथ:

LoadModule dav_svn_module  /opt/libexec/mod_dav_svn.so 
LoadModule authz_svn_module /opt/libexec/mod_authz_svn.so 

NameVirtualHost *:8000 
<VirtualHost *:8000> 
    ServerAdmin [email protected] 
    ServerName some.host.org 
    DocumentRoot /path/to/wwwroot 
    DAVLockDB /opt/var/lock/davlock/svndavlockdb 

    <Directory /path/to/wwwroot> 
     Options FollowSymLinks Indexes 
#  #AllowOverride None 
     Order allow,deny 
     Allow from all 
    </Directory> 

    <Directory /path/to/wwwroot/svn> 
     Options FollowSymLinks Indexes 
     AllowOverride None 
     Order allow,deny 
     Allow from all 
    </Directory> 

    CustomLog /path/to/wwwroot/log/access_log.txt combined 
    ErrorLog /path/to/wwwroot/log/error_log.txt 

    <Location /svn> 

     #AllowOverride None 
     #RewriteEngine Off 
     #RewriteOptions AllowNoSlash 
     DirectorySlash Off 

     DAV svn 
     SVNParentPath /path/to/wwwroot/svn 
#  SVNListParentPath on 

     AuthType Basic 
     AuthName "Subversion Repository" 
     AuthBasicAuthoritative Off 
     AuthUserFile /path/to/wwwroot/svn/.htauthfile 
     <Limit GET OPTIONS REPORT PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK> 
      Require valid-user 
     </Limit> 
    </Location> 

</VirtualHost> 

UPD2 ऐसा लगता है कि "DirectorySlash बंद" निर्देश केवल "some.host.org/svn" के लिए काम करता है और "some.host.org/svn/repo1", "some.host.org/svn/repo2" आदि के लिए काम नहीं करता है - बाल निर्देशिकाएं इस विकल्प का वारिस नहीं करती हैं।

UPD3 मैं निम्नलिखित पंक्तियों को कॉन्फ़िगर में जोड़ने का प्रयास करता हूं, लेकिन परिणाम समान है - "निर्देशिका स्लैश ऑफ़" केवल "/ svn" के लिए काम करता है, न कि बच्चों के लिए।

<LocationMatch "/svn/.*"> 
    DirectorySlash Off 
</LocationMatch> 

हल समस्या को हल किया। यह मेरी गलती है - मैंने दस्तावेज़ Root फ़ोल्डर के तहत एसवीएन रिपोजिटरी रूट रखा है, इसलिए अपाचे और web_dav समझ में नहीं आ रहा है, जो अनुरोध को संभालना चाहिए। यह कम से कम TortoiseSVN क्लाइंट पर लागू होता है। SVN डेवलपर्स से

टिप्पणियाँ:

इसका मतलब है अपने httpd.conf गलत कॉन्फ़िगर है। आम तौर पर यह त्रुटि तब होती है जब आपने सबवर्सन आभासी "स्थान" को एक ही समय में दो अलग-अलग क्षेत्रों में मौजूद करने के लिए परिभाषित किया है।

उदाहरण के लिए, यदि आपने एक भंडार निर्यात किया है, लेकिन आपने अपना दस्तावेज़ रूट/www भी सेट किया है, तो आप परेशानी में हैं। जब अनुरोध/www/foo/bar के लिए अनुरोध आता है, तो अपाचे को यह नहीं पता कि आपके दस्तावेज़ रूट में नाम/foo/bar नामक वास्तविक फ़ाइल या क्या////foo से फ़ाइल/बार लाने के लिए mod_dav_svn से पूछना है या नहीं भंडार। आम तौर पर पूर्व मामला जीतता है, और इसलिए "स्थायी रूप से हटाया गया" त्रुटि।

समाधान यह सुनिश्चित करना है कि आपका भंडार सामान्य वेब शेयरों के रूप में पहले से निर्यात किए गए किसी भी क्षेत्र में ओवरलैप या लाइव न हो।

यह भी संभव है कि आपके पास वेब रूट में कोई ऑब्जेक्ट है जिसका नाम आपके भंडार URL के समान है। उदाहरण के लिए, कल्पना करें कि आपके वेब सर्वर का दस्तावेज़ रूट/var/www है और आपका सबवर्जन रिपोजिटरी/home/svn/repo पर स्थित है। फिर आप http://local.host/myrepo पर भंडार की सेवा के लिए अपाचे को कॉन्फ़िगर करते हैं। यदि आप निर्देशिका/var/www/myrepo बनाते हैं/इससे 301 त्रुटि उत्पन्न हो जाएगी।

उत्तर

9

mod_dir के DirectorySlash directive का उपयोग करें।डॉक्स से उदाहरण:

# see security warning in docs 
<Location /some/path> 
    DirectorySlash Off 
    SetHandler some-handler 
</Location> 
+0

मैं निर्देशिका स्लैश निर्देश जोड़ने की कोशिश करता हूं, लेकिन यह काम नहीं कर रहा है। – kruz05

+0

@ kruz05 - क्या आपने एक ऐसा उत्तर स्वीकार कर लिया है जो काम नहीं करता है? –

+2

सभी निर्देशिका रीडायरेक्ट को चालू करने के लिए, बस इसे स्थान की स्थिति के बिना .htaccess फ़ाइल में जोड़ें – Codebeat

2

.htaccess को

DirectorySlash Off 

जोड़ा जा रहा है मेरे लिए ठीक काम किया।