我正在尝试为各种客户端设置一个 webdav 网站来上传/下载文件。但是我不希望每个客户都看到其他客户的数据。每个客户端都使用 SSL 客户端证书进行身份验证,因此我想将它们 chroot 到它们自己的目录树中。
例如:
- > https://example.com/webdav/upload
- 应该映射到文件系统位置
- /somewebroot/webdav/SSL_USERNAME/upload
我认为我可以为此使用 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”不支持 PATTERN 中的服务器变量,解决这个问题就相当简单了。因此,您必须使用反向引用将其纳入模式。此外,“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>
关于apache - 使用 mod_rewrite 虚拟 chroot 客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5462811/