【问题标题】:Apache wrong RewriteRule for WebDAV serviceWebDAV 服务的 Apache 错误 RewriteRule
【发布时间】:2016-06-08 16:18:17
【问题描述】:

我有一个 RewriteRule 的问题,该 RewriteRule 可以(或多或少)在浏览器的 html 视图中工作,但不能作为客户端的 WebDav 服务(Linux 下的 davfs 或 cadaver)。我的感觉是和RewriteRule有关。

我想要做什么:从 URL 的角度来看:有一个文件夹 /users/somebody,其中 somebody 是个人用户名。我想要一个快捷方式/private,它直接指向我有写权限的/users/myusername 目录。 在文件系统中,我有 /storage/davroot 用于 DAV,DocumentRoot 和 /storage/davusers 用于所有用户目录。请注意,用户目录不在 DocumentRoot 中,这有点棘手。

我目前的解决方案是这样的:

    # It's NOT working with the RewriteCond -- why?
    # RewriteCond %{LA-U:REMOTE_USER} ^[a-z].*
    RewriteRule ^\/private(.*)$ /users/%{LA-U:REMOTE_USER}$1 [PT]

   <Directory /storage/davroot/>
            # some settings for the rights, do not care
   </Directory>
   Alias /users /storage/davusers/
   <Directory "/storage/davusers/">
            # some other settings for the rights, also don't care
   </Directory>

什么是正确的:几乎整个浏览器视图都是正确的。除了一个问题:正确列出了 url /private/,url 栏保持 /private/(想要的行为)。但是 url /private 被转换为 /users/username/ 并且 url 栏也更改为该地址。为什么?

如果我使用 webdav 客户端 (davfs) 登录,主题甚至会变得陌生。私人文件夹为空,用户文件夹无法访问。使用 cadaver 时,无法访问私人文件夹,并且正确显示了用户文件夹。

【问题讨论】:

    标签: apache mod-rewrite webdav


    【解决方案1】:

    这是个坏主意。重写通常适用于“哑”HTTP 端点(例如文件),但对于 WebDAV,这会发生变化。

    问题在于,PROPFIND 等 WebDAV HTTP 请求返回的结果包含 url。这些 url 必须与您用于访问资源的任何 url 匹配。

    Apache 的重写仅适用于传入的请求。它不会“实时修改”传出的 xml 响应以匹配传入的任何内容。

    在这种情况下,明智的做法是不要重写,而只是重定向。并非每个客户端都支持这一点,但至少您的服务器按照规范以合理可预测的方式工作。

    另一种可能性是使用AliasMatch 之类的东西,因为该指令实际上对本地路径进行处理,而不仅仅是url。如果你能让它工作,我想 mod_webdav 将继续以理智的方式运行。

    但我不确定AliasMatch 是否可以使用像REMOTE_USER 这样的标头。

    【讨论】:

      猜你喜欢
      • 2017-04-21
      • 1970-01-01
      • 1970-01-01
      • 2016-06-16
      • 1970-01-01
      • 2014-01-01
      • 2015-09-30
      • 1970-01-01
      • 2015-04-19
      相关资源
      最近更新 更多