2012-11-13 10 views
8

Automatycznie przekierowuje wszystkie żądania, które są punktami do katalogów Apache 2.2.20 i nie ma końcowego ukośnika na ten sam URL z ukośnym ukośnikiem, jak pokazano poniżej:Jak wyłączyć przekierowanie 301, które dodaje ukośny ukośnik do nazwy katalogu w Apache

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

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

We wszystkich przypadkach jest to dobre zachowanie, ale muszę wyłączyć tę funkcję dla jednego specjalnego folderu (nie dla wszystkich) i nie mogę znaleźć, gdybym mógł to zrobić.

Wyszukiwanie reguł "przepisywania" mówi nic nie zakłada - tylko dyrektywa LoadModule mod_rewrite.so. Ponadto nie ma plików .htaccess na serwerze katalogów w drzewie katalogów. Czy istnieją inne dyrektywy, które sprawiają, że rzeczy?

UPD1 próbuję skonfigurować SVN koryta HTTP z następnym 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 Wydaje się, że "DirectorySlash Off" dyrektywa działa tylko dla "some.host.org/svn" i nie działa dla "some.host.org/svn/repo1", "some.host.org/svn/repo2" itd. - katalogi podrzędne nie dziedziczą tej opcji.

UPD3 próbuję dodać następujące linie do config, ale wynik jest taki sam - „DirectorySlash Off” działa tylko dla „/ svn”, a nie dla Childs.

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

ROZWIĄZANIA problem rozwiązany. To jest mój błąd - umieściłem korzeń repozytorium SVN w folderze DocumentRoot, więc apache i web_dav nie mogą zrozumieć, kto musi obsługiwać żądanie. Dotyczy to przynajmniej klienta TortoiseSVN.

Komentarze z twórców svn:

Oznacza to twój httpd.conf jest skonfigurowana. Zwykle ten błąd występuje, gdy zdefiniujesz wirtualną "lokalizację" Subversion, aby istniała w dwóch różnych zakresach w tym samym czasie.

Na przykład, jeśli wyeksportowałeś repozytorium jako, ale ustawiłeś także swój DocumentRoot na/www, masz kłopoty. Kiedy żądanie przychodzi do/www/foo/bar, apache nie wie, czy znaleźć prawdziwy plik o nazwie/foo/bar w twoim DocumentRoot, czy też poprosić mod_dav_svn o pobranie pliku/paska z/www/foo magazyn. Zazwyczaj wygrywa poprzedni przypadek, a więc błąd "Przeniesiony na stałe".

Rozwiązaniem jest upewnienie się, że twoje repozytorium nie nakłada się lub nie znajduje się na żadnym z obszarów już wyeksportowanych jako zwykłe udziały sieciowe.

Możliwe jest również, że w głównym katalogu internetowym znajduje się obiekt o tej samej nazwie co adres URL repozytorium. Na przykład wyobraź sobie, że katalog główny twojego serwera WWW to/var/www, a twoje repozytorium Subversion znajduje się w/home/svn/repo. Następnie skonfiguruj serwer Apache do obsługi repozytorium pod numerem http://local.host/myrepo. Jeśli utworzysz katalog/var/www/myrepo /, spowoduje to błąd 301.

Odpowiedz

9

Użyj mod_dir's DirectorySlash directive.Przykład z docs:

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

Próbuję dodać dyrektywę DirectorySlash, ale nie działa. – kruz05

+0

@ kruz05 - Czy zaakceptowałeś odpowiedź, która nie działa? –

+2

Aby przekierować WSZYSTKIE przekierowania katalogów, po prostu dodaj je do pliku .htaccess bez warunku lokalizacji – Codebeat

2

Dodawanie

DirectorySlash Off 

do .htaccess pracował dobrze dla mnie.

Powiązane problemy