Назад | Перейти на главную страницу

apache2.4 с webdav выдает ошибку 405

Я только что обновил свою тестовую машину с Apache 2.2.29 до 2.4.10, и на самом деле у меня возникли проблемы с модулем webdav.

Если я попытаюсь войти в учетную запись webdav, она сработает, но если я попытаюсь указать свой текущий каталог, я получу ошибку 405.

Я знаю некоторые изменения в этой новой версии, я внес некоторые изменения, чтобы мой виртуальный хост был совместим с 2.4.

У меня есть 2 виртуальных хоста, на самом деле все они взяты из моей установки 2.2, я немного обновил их, чтобы быть готовым к 2.4. Один из них отлично работает с webdav, но второй генерирует 405 в каталоге листинга.

Вот мой виртуальный хост, который работает:

Журнал Apache:

10.19.87.87 - maxence [02/Jan/2015:16:30:12 +0100] "PROPFIND / HTTP/1.1" 207 6331 "-" "Cyberduck/4.6.1 (16121) (Windows 7/6.1) (x86)"

    <VirtualHost *:80>
    ServerAdmin info@test.com
    DocumentRoot /home/web/working/dev/

    ServerName webdav.working.test.net
    ServerAlias webdav.working.test.net

    ErrorLog /var/log/apache2/net.test.working.webdav-error.log
    CustomLog /var/log/apache2/net.test.working.webdav-access.log combined

    <Files ".ht*">
        allow from all
    </Files>

    <Directory />
        Options FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>

    <Location />
        DAV on
        AuthName "test WebDAV Storage - working"
        AuthType Basic
        AuthUserFile /etc/apache2/htpasswd-webdav
        <Limit GET POST PUT DELETE PROPFIND PROPPATCH MKCOL COPY DUPLICATE MOVE LOCK UNLOCK OPTIONS HEAD>
        Require valid-user
        </Limit>
        AddType text/html .php .phtml
    </Location>

</Virtualhost>

А теперь тот, кого нет работает :

Журнал Apache:

10.19.87.87 - maxence [02/Jan/2015:16:10:54 +0100] "PROPFIND / HTTP/1.1" 405 475 "-" "Cyberduck/4.6.1 (16121) (Windows 7/6.1) (x86)"

<VirtualHost *:80>
    ServerAdmin info@test.com
    DocumentRoot /home/web/notworking/dev/

    ServerName webdav.notworking.test.net
    ServerAlias webdav.notworking.test.net

    ErrorLog /var/log/apache2/net.test.notworking.webdav-error.log
    CustomLog /var/log/apache2/net.test.notworking.webdav-access.log combined

    <Files ".ht*">
        allow from all
    </Files>

    <Directory />
        Options FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>

    <Location />
        DAV on
        AuthName "test WebDAV Storage - notworking"
        AuthType Basic
        AuthUserFile /etc/apache2/htpasswd-webdav
        <Limit GET POST PUT DELETE PROPFIND PROPPATCH MKCOL COPY DUPLICATE MOVE LOCK UNLOCK OPTIONS HEAD>
        Require valid-user
        </Limit>
        AddType text/html .php .phtml
    </Location>

</Virtualhost>

Как видите, моя конфигурация DAV точно такая же. Папки имеют одинаковую конфигурацию:

 drwxr-xr-x 7 www-data www-data      26 déc.  24 12:07 dev

Если кто-то поймет, почему я не могу перечислить свой каталог, это мне очень поможет :)

Кажется, есть несколько людей, которые столкнулись с этой проблемой после последнего обновления.

Я нашел свой ответ Вот: в Dav в каталогах отключите функции индексации каталога с помощью следующей директивы:

DirectoryIndex disabled

Примечательно: один из веб-сайтов, которыми я управляю, был поврежден 7 января в результате php-атаки "Hmei7" на старые копии wordpress, которые я разместил в доступном месте и забыл. Не оставляйте старые приложения на базе php в видимых местах!

Как уже указывал ThBB, DirectoryIndex проблема, потому что индексный скрипт получит HTTP-запрос и не сможет его обработать.

В моем случае мне нужна функция индекса, потому что у меня есть веб-приложение в целевом каталоге. У меня есть сценарий развертывания, который удаляет каталог, снова создает его, а затем загружает все файлы. Чтобы мой сценарий развертывания работал вместе с DirectoryIndex Мне просто пришлось разместить дополнительный DELETE запрос индексного файла перед DELETE запрос на содержащий каталог:

DELETE /my-app/index.html
DELETE /my-app
MKCOL /my-app
POST /my-app/index.html
POST /my-app/foo.bar
... all other files ...