Виртуально клиенты chroot, использующие mod_rewrite? - PullRequest
1 голос
/ 28 марта 2011

Я пытаюсь настроить веб-сайт для различных клиентов, чтобы загружать / скачивать файлы. Однако я не хочу, чтобы каждый клиент видел данные других клиентов. Каждый клиент использует SSL-сертификаты клиента для аутентификации, поэтому я хотел бы поместить их в отдельное дерево каталогов.

Например:

  • https://example.com/webdav/upload
  • Должен отображаться в расположение файловой системы
  • / somewebroot / WebDAV / SSL_USERNAME / загрузки

Я думал, что мог бы использовать для этого 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>

1 Ответ

0 голосов
/ 29 марта 2011

Исправить это довольно просто, если выяснить, что «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>
...