Как отключить 301 перенаправление, которое добавляет конечную косую черту к имени каталога в Apache

Apache 2.2.20 автоматически перенаправляет все запросы, которые указывают на каталоги и не имеют конечной косой черты на тот же URL с конечной косой чертой, как показано ниже:

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

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

во всех случаях это прекрасное поведение, но мне нужно отключить эту функцию для одной специальной папки (не для всех) и не могу найти, могу ли я это сделать.

Поиск правил "перезаписи" ничего не говорит основаниям - только директива LoadModule mod_rewrite.Итак. Кроме того, нет.htaccess файлы в сервер каталогов в дереве каталогов. Есть ли другие директивы, которые делают вещь?

UPD1 Я пытаюсь настроить SVN через HTTP со следующей конфигурацией:

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 admin@some.host.org
    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 Off" работает только для "some.host.org/svn" и не работает для "some.host.org/svn/repo1", "some.host.org/svn/repo2" etc-дочерние каталоги не наследуют эту опцию.

UPD3 Я пытаюсь добавить следующее строки в config, но результат тот же - "DirectorySlash Off" работает только для "/svn", а не для чайлдов.

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

решить Проблема решена. Это моя ошибка - Я поместил корень репозитория SVN в папку DocumentRoot, поэтому apache и web_dav не могут понять, кто должен обрабатывать запрос. Это относится, по крайней мере, к клиенту TortoiseSVN.

комментарии разработчиков SVN:

это означает ваш httpd.conf-это неправильно. Обычно эта ошибка происходит, когда вы определили виртуальное "местоположение" Subversion для существования в двух разных областях одновременно.

например, если вы экспортировали репозиторий как, но вы также установили DocumentRoot как /www, то у вас проблемы. Когда приходит запрос на /www/foo/bar, apache не знает, следует ли найти реальный файл с именем /foo/bar в вашем DocumentRoot или попросить mod_dav_svn получить файл /bar из репозитория /www/foo. Как правило, в первом случае побеждает, и, следовательно, ошибка "перемещено навсегда".

решение состоит в том, чтобы убедиться, что ваш репозиторий не перекрывается или не живет в каких-либо областях, уже экспортированных как обычные веб-ресурсы.

также возможно, что у вас есть объект в веб-Корне, который имеет то же имя, что и URL вашего репозитория. Например, представьте, что корень документа вашего веб-сервера - /var /www, а репозиторий Subversion находится в/home/svn / repo. Затем вы настраиваете Apache для обслуживания репозитория в http://local.хост/myrepo. Если вы затем создадите каталог / var/www/ myrepo/, это вызовет ошибку 301.

2 ответов


использовать mod_dir это директива DirectorySlash. Пример из документов:

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

добавлять

DirectorySlash Off

to .htaccess отлично сработало для меня.