web-dev-qa-db-ja.com

webdavを使用したapache2.4で405エラーが発生する

テストマシンをApache 2.2.29から2.4.10にアップグレードしたところ、実際にwebdavモジュールで問題が発生しました。

Webdavアカウントにログインしようとすると機能しますが、現在のディレクトリを一覧表示しようとすると405エラーが発生します。

この新しいバージョンでの変更として一部の構成を知っています。仮想ホストを2.4と互換性を持つように変更しました。

私は2つのvirtualhostを実際に取得しました。これらはすべて2.2セットアップからのものです。2.4に対応するために少し更新しました。それらの1つはwebdavで正常に動作しますが、2つ目はリストディレクトリに405を生成します。

これがworkingである私の仮想ホストです:

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 [email protected]
    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>

そして今、そうではない人working

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 [email protected]
    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構成はまったく同じです。フォルダrigthは同じ設定を取得しました:

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

誰かがディレクトリを一覧表示できない理由を知る手掛かりを得た場合、それは私に多くの助けになります:)

6
Maxence

前回のアップデート後にこの問題に遭遇した人がたくさんいるようです。

私は私の答えを見つけました ここ :ディレクトリのDavで、次のディレクティブを使用してディレクトリインデックス機能を無効にします。

DirectoryIndex disabled

注意:私が管理しているWebサイトの1つは、1月7日に、wordpressの古いコピーへの "Hmei7" php攻撃によって改ざんされました。目に見える場所に潜んでいる古いphpベースのアプリ!

11
ThBB

ThBBがすでに指摘したように、DirectoryIndexが問題です。これは、インデックススクリプトがHTTPリクエストを受け取り、それを処理しないためです。

私の場合、ターゲットディレクトリにWebアプリがあるため、index-featureが必要です。ディレクトリを削除して再度作成し、すべてのファイルをアップロードするデプロイメントスクリプトがあります。展開スクリプトを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 ...
1
fishbone