如何在Apache 2.4中使用DAV和DirectoryIndex?

时间:2015-06-18 13:36:06

标签: apache webdav

在我的apache配置中,我有一个像这样配置的虚拟主机:

Alias /mediamanager /storage/files/mediamanager
<Directory /storage/files/mediamanager>
  DirectoryIndex /mediaManagerIndex.php
  DAV On
  # ... And some authentication directives ... #
</Directory>

这个想法是有人可以通过WebDAV-Client和简单的Web浏览器访问这些文件,在这种情况下,PHP脚本会生成一些漂亮的目录视图。

这在Apache 2.2中运行良好,但最近我升级到了Apache 2.4,现在它已经坏了。我非常怀疑我患有this bug已经2岁了,并且看不到任何修复。建议的解决方法是添加:

<Limit PROPFIND>
  DirectoryIndex never-encounterable-file-name.html
</Limit>

对我不起作用。可能是因为我仍然想要一个目录索引。如果我完全删除我的DirectoryIndex WebDAV(此目录中不存在index.html或类似文件),但当然我无法使用我的PHP文件作为目录索引。我试图在<Limit GET>中指定我的DirectoryIndex,但这没有效果。

有没有办法让Debian和DirectoryIndex在Debian上的Apache 2.4中同时工作(如果可能,无需更改源代码和重新编译)?

4 个答案:

答案 0 :(得分:4)

要解决此问题,请禁用WebDAV站点的目录索引。

在您的sites-available / site.conf文件中,将DirectoryIndex disabled添加到<Directory>声明中,如下所示:

    <Directory /path/to/my/webdav/dir>
                    Options Indexes FollowSymLinks MultiViews
                    AllowOverride all
                    Require all granted

                    DirectoryIndex disabled
   </Directory>

然后重新加载Apache,你将不再有这个问题:

sudo service apache2 reload

答案 1 :(得分:4)

对我来说,以下配置解决了这两个问题:

  • WebDAV再次运作
  • 目录索引,如果用户使用Web浏览器访问存储库

它的工作原理是通过简单的重写规则手动实现目录索引功能,这些规则仅适用于GET请求方法。

以下代码必须放在apache配置文件中的服务器配置或虚拟主机上下文中。

# Turn off (automatic) Directory-Indexing 
DirectoryIndex disabled

RewriteEngine On

# Rewrite rules for the root directory
RewriteCond  "%{REQUEST_METHOD}"  "(GET)"
RewriteRule  "^/$"                 "/index.php"  [L]

# Rewrite rules for other sub-directories
RewriteCond  "%{REQUEST_METHOD}"  "(GET)"
# The following line checks, if the index.php file exists
RewriteCond  "%{DOCUMENT_ROOT}/$1/index.php"  "-f"
RewriteRule  "^/(.*)/$"                 "/$1/index.php"  [L]

别忘了重装Apache!

答案 2 :(得分:0)

对我来说,答案是不对的......我必须将^ / $和^ /(。)/ $改为^ /?$和^ /?(。)/ $为了让它起作用......

答案 3 :(得分:-1)

这是我当前正在使用的解决方案,位于WebDav服务使用的目录树根目录的.htaccess文件中。在这种情况下,我不使用PHP,仅使用html文件,但是可以轻松地对其进行修改:

# Turn off automatic directory indexing 
Options -Indexes 
DirectoryIndex disabled

# Redirect directory requests to index.html, only for GET requests
RewriteEngine On
RewriteCond  %{REQUEST_METHOD}  "GET"
RewriteCond  %{REQUEST_FILENAME}  -d
RewriteRule  ^(.*)$  $1index.html  [L]

要始终启动请求的PHP文件,只需将PHP文件名的最后一行的“ index.html”替换为:

RewriteRule  ^(.*)$  $1mediaManagerIndex.php  [L]