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.
Próbuję dodać dyrektywę DirectorySlash, ale nie działa. – kruz05
@ kruz05 - Czy zaakceptowałeś odpowiedź, która nie działa? –
Aby przekierować WSZYSTKIE przekierowania katalogów, po prostu dodaj je do pliku .htaccess bez warunku lokalizacji – Codebeat