Apache 使用mod_rewrite的虚拟chroot客户端?

Apache 使用mod_rewrite的虚拟chroot客户端?,apache,mod-rewrite,ssl,client-certificates,Apache,Mod Rewrite,Ssl,Client Certificates,我正在尝试为各种客户端设置一个webdav网站,以便上载/下载文件。但是,我不希望每个客户端都看到其他客户端的数据。每个客户机都使用SSL客户机证书进行身份验证,因此我想将它们引导到它们自己的目录树中 例如: 应该映射到文件系统位置 /somewebroot/webdav/SSL\u用户名/上传 我原以为我可以使用mod_rewrite来实现这一点,但我的规则似乎让我陷入了一个无限重定向循环。有什么想法吗 Alias /webdav /somewebroot/webdav <Directo

我正在尝试为各种客户端设置一个webdav网站,以便上载/下载文件。但是,我不希望每个客户端都看到其他客户端的数据。每个客户机都使用SSL客户机证书进行身份验证,因此我想将它们引导到它们自己的目录树中

例如:

应该映射到文件系统位置 /somewebroot/webdav/SSL\u用户名/上传 我原以为我可以使用mod_rewrite来实现这一点,但我的规则似乎让我陷入了一个无限重定向循环。有什么想法吗

Alias /webdav /somewebroot/webdav
<Directory /somewebroot/webdav>
    RewriteEngine On
    RewriteBase /webdav

    RewriteCond %{SSL:SSL_CLIENT_S_DN_CN} ADMIN #The admin does not get chrooted
    RewriteRule .* - [L]

    RewriteCond %{REQUEST_URI} !^%{SSL:SSL_CLIENT_S_DN_CN}/(.*)
    RewriteRule ^(.*) %{SSL:SSL_CLIENT_S_DN_CN}/$1 [L]
</Directory>

一旦您发现RewriteCond不支持模式中的服务器变量,解决这个问题的方法就相当简单了。因此,您必须使用反向引用将其放入模式中。另外,RewriteCond不使用RewriteBase指令,因此您也必须考虑到这一点

Alias /webdav /somewebroot/webdav
<Directory /somewebroot/webdav>
    RewriteEngine On
    RewriteBase /webdav

    RewriteCond %{SSL:SSL_CLIENT_S_DN_CN} ADMIN #The admin does not get chrooted
    RewriteRule .* - [L]

    RewriteCond %{SSL:SSL_CLIENT_S_DN_CN}::%{REQUEST_URI} !^(.*)::/webdav/\1/(.*)
    RewriteRule ^(.*) %{SSL:SSL_CLIENT_S_DN_CN}/$1 [L]
</Directory>

据我所知,REQUEST_URI变量在重定向中的行为与普通请求不同,这可能是破坏此解决方案的原因。我喜欢这个概念。你有什么东西来验证证书吗?我将查看mod rewrite指令,看看是否可以得到一些建议。我正在为此服务器和其他服务器运行我自己的证书颁发机构,因此要验证客户端是否被允许,他们只需要拥有由CA正确签名的客户端证书。