Linux

帶有 webdav 的 apache2.4 給出 405 錯誤

  • October 25, 2018

我剛剛將我的測試機器從 Apache 2.2.29 升級到 2.4.10,實際上我遇到了 webdav 模組的一些問題。

如果我嘗試登錄 webdav 帳戶,它可以工作,但如果我嘗試列出我目前的目錄,我會收到 405 錯誤。

我知道這個新版本的一些配置發生了變化,我做了一些更改以使我的虛擬主機與 2.4 兼容。

我有 2 個虛擬主機,實際上所有這些都來自我的 2.2 設置,我對它們進行了一些更新,以便為 2.4 做好準備。其中一個適用於 webdav,但第二個在列表目錄上生成 405。

這是我正在工作的虛擬主機:

阿帕奇日誌:

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>

現在,那個不工作的人:

阿帕奇日誌:

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

值得注意的是:我管理的其中一個網站在 1 月 7 日被“Hmei7” php 攻擊,該攻擊對我放置在可訪問的地方但被遺忘的 wordpress 舊副本進行了攻擊。不要讓舊的基於 php 的應用程序潛伏在可見的地方!

正如 ThBB 已經指出的那樣,這DirectoryIndex就是問題所在,因為索引腳本將接收 HTTP 請求並且不會處理它。

在我的情況下,我需要索引功能,因為我在目標目錄中有一個 Web 應用程序。我有一個部署腳本,它刪除目錄,再次創建它,然後上傳所有文件。為了讓我的部署腳本與我一起工作,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 ...

引用自:https://serverfault.com/questions/655923