Jak wyłączyć przekierowanie 301, które dodaje końcowy ukośnik do nazwy katalogu w Apache
Apache 2.2.20 automatycznie przekierowuje wszystkie żądania, które są punktami do katalogów, i nie ma ukośnego ukośnika na ten sam adres URL z końcowym ukośnikiem, jak pokazano poniżej:
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ę go znaleźć, jeśli mogę to zrobić.
Wyszukiwanie reguł „Rewrite” mówi, że nic nie znajduje - tylko dyrektywa LoadModule mod_rewrite.so. Ponadto nie ma plików .htaccess na serwerze katalogów w drzewie katalogów. Czy są jakieś inne dyrektywy, które powodują?
UPD1 Próbuję skonfigurować SVN przez HTTP z następną konfiguracją:
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 dyrektywa „DirectorySlash Off” działa tylko dla „some.host.org/svn” i nie działa dla „some.host.org/svn/repo1”, „some.host.org/svn/repo2” itp. katalogi potomne 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 dzieci.
<LocationMatch "/svn/.*">
DirectorySlash Off
</LocationMatch>
ROZWIĄZANY Problem rozwiązany. To mój błąd - umieściłem katalog główny repozytorium SVN w folderze DocumentRoot, więc apache i web_dav nie mogą zrozumieć, kto musi obsługiwać żądania. Dotyczy to przynajmniej klienta TortoiseSVN.
Komentarze deweloperów SVN:
Oznacza to, że httpd.conf jest źle skonfigurowany. Zwykle ten błąd występuje, gdy wirtualna „lokalizacja” Subversion została zdefiniowana w dwóch różnych zakresach jednocześnie.
Na przykład, jeśli wyeksportowałeś repozytorium jako, ale ustawiłeś także DocumentRoot na / www, to masz kłopoty. Gdy pojawi się żądanie dla / www / foo / bar, apache nie wie, czy znaleźć w pliku DocumentRoot prawdziwy plik o nazwie / foo / bar, czy też poprosić mod_dav_svn o pobranie pliku / paska ze strony / www / foo magazyn. Zwykle poprzedni przypadek wygrywa, a więc błąd „Przeniesiony na stałe”.
Rozwiązaniem jest upewnienie się, że twoje repozytorium nie pokrywa się lub nie znajduje się w obszarze już wyeksportowanym jako zwykłe udziały w sieci.
Możliwe jest również, że masz obiekt w katalogu głównym, który ma taką samą nazwę jak adres URL repozytorium. Na przykład, wyobraź sobie, że katalogiem głównym twojego serwera jest / var / www, a twoje repozytorium Subversion znajduje się w / home / svn / repo. Następnie konfigurujesz Apache, aby obsługiwał repozytorium whttp://local.host/myrepo. Jeśli następnie utworzysz katalog / var / www / myrepo / spowoduje to błąd 301.