Como desabilitar o redirecionamento 301 que adiciona barra direita ao nome do diretório no Apache
O Apache 2.2.20 redireciona automaticamente todas as solicitações que são pontos para diretórios e não possui barra no mesmo URL com barra final, como mostrado abaixo:
GET /some/path/to/dir HTTP/1.1
Host: www.some.org
...
301 Moved permanently
Location: http://www.some.org/some/path/to/dir/
Em todos os casos, é um bom comportamento, mas eu preciso desativar esse recurso para uma pasta especial (não para todos), e não consigo encontrar onde eu posso fazer isso.
Procurando por regras 'Rewrite' diz nada funda - somente diretiva LoadModule mod_rewrite.so. Além disso, não há arquivos .htaccess no servidor de diretórios na árvore de diretórios. Existe alguma outra diretriz que faça alguma coisa?
UPD1 Eu tento configurar o SVN através do HTTP com a próxima configuração:
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 Parece que a diretiva "DirectorySlash Off" funciona apenas para "some.host.org/svn" e não funciona para "some.host.org/svn/repo1", "some.host.org/svn/repo2" etc - diretórios filhos não herdam essa opção.
UPD3 Eu tento adicionar as seguintes linhas na configuração, mas o resultado é o mesmo - "DirectorySlash Off" funciona apenas para "/ svn" e não para os filhos.
<LocationMatch "/svn/.*">
DirectorySlash Off
</LocationMatch>
RESOLVIDO Problema resolvido. Este é um erro meu - Coloquei raiz do repositório SVN na pasta DocumentRoot, para que o apache e o web_dav não possam entender, quem deve manipular a solicitação. Isto aplica-se ao cliente do TortoiseSVN pelo menos.
Comentários dos desenvolvedores do SVN:
Isso significa que o seu httpd.conf está mal configurado. Geralmente este erro acontece quando você define o "local" virtual do Subversion para existir dentro de dois escopos diferentes ao mesmo tempo.
Por exemplo, se você exportou um repositório como, mas também configurou o DocumentRoot como / www, estará com problemas. Quando a requisição chega para / www / foo / bar, o apache não sabe se deve encontrar um arquivo real chamado / foo / bar dentro do seu DocumentRoot, ou se deve pedir ao mod_dav_svn para buscar um arquivo / barra do / www / foo repositório. Geralmente, o primeiro caso ganha e, portanto, o erro "Movido permanentemente".
A solução é garantir que o seu repositório não se sobreponha ou viva dentro de áreas já exportadas como compartilhamentos normais da web.
Também é possível que você tenha um objeto na raiz da Web que tenha o mesmo nome da URL do seu repositório. Por exemplo, imagine que a raiz do documento do seu servidor web é / var / www e o seu repositório Subversion está localizado em / home / svn / repo. Você então configura o Apache para servir o repositório emhttp://local.host/myrepo. Se você criar o diretório / var / www / myrepo / isto causará um erro 301.