apache - 使用 mod_rewrite 虚拟 chroot 客户端?

标签 apache mod-rewrite ssl client-certificates

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

例如:

我认为我可以为此使用 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/

相关文章:

ssl - 在 sunJSSE (JDK 1.8) 中限制椭圆曲线

apache - 如何将我的 tomcat 应用程序连接到 apache 2,这样路径就不会很差?

java - 有人可以解释 ivy.xml 依赖项的 conf 属性吗?

php - Apache/Mod 重写 : Route everything to index. php?

.htaccess - mod_rewrite : If the file exists in another directory, 改为服务那个

asp.net - 切换到 SSL 时 WCF 中的访问被拒绝(ASP.NET Forms 身份验证)

java - Apache 希罗 : not able to access secured URL although logged in successfully

apache - 将 http 重定向到 APACHE 站点中某个页面的 https

regex - 在 mod_rewrite 规则中转换为小写

email - 后缀/Dovecot SSL 配置