Estou tentando configurar um servidor WebDAV que usa o nome de usuário para redirecionar para um diretório DAV privado. Em cada diretório privado, há também uma pasta chamada SharedFolder .
A ideia é que, quando o usuário fizer login, ele seja primeiro redirecionado para seu diretório privado. Usando o módulo de reescrita, não haverá nenhum caminho mostrado na URL, apenas o nome do host, que impede que os usuários digitem outro diretório privado. Quando o usuário abrir a pasta fixa chamada SharedFolder , o mod_rewrite será disparado no nome da dobra RewriteCond correspondente e redirecionado para a pasta compartilhada correspondente, conforme designado no RewriteMap.
Minha configuração de virtualhost:
LoadModule dbd_module modules/mod_dbd.so
LoadModule authn_dbd_module modules/mod_authn_dbd.so
DBDriver mysql
DBDParams "host=db.example.com user=username pass=password dbname=webdav"
<VirtualHost *:80>
Servername webdav.example.com
DocumentRoot /var/www
Options +FollowSymlinks
RewriteLog "/var/log/httpd/rewrite.log"
RewriteLogLevel 5
RewriteEngine on
RewriteRule ^(.*) /webdav/%{LA-U:REMOTE_USER}$1
RewriteMap usergroup txt:/etc/httpd/usersingroups
RewriteCond %{REQUEST_URI} ^/SharedFolder/ [NC]
RewriteRule ^(.*)$ /sharedfolders/${usergroup:%{LA-U:REMOTE_USER}} [L]
<Directory "/var/www">
DAV on
Options +Indexes
AuthName "example.com"
AuthType Digest
AuthDigestDomain /
AuthDigestProvider dbd
AuthDBDUserRealmQuery "SELECT digest FROM users WHERE username = %s AND unix_timestamp() < (ts+900) "
Require valid-user
</Directory>
</VirtualHost>
O conteúdo do RewriteMap é o seguinte:
fred sales/indoor/
bob sales/outdoor/
alice production/warehouse
O layout do sistema de arquivos está todo sob o DocumentRoot / var / www. Em / var / www existem duas pastas. Um é chamado / var / www / webdav que contém todos os diretórios privados. A outra pasta é denominada / var / www / sharedfolders, que contém diretórios pertencentes a diferentes grupos. Ao definir o nome do caminho no RewriteMap , posso determinar qual diretório de grupo é exibido nos usuários SharedFolder .
O problema que estou enfrentando é que o redirecionamento para o SharedFolder não funciona corretamente. Todo arquivo ou pasta no diretório privado de usuários é acessível e utilizável. Exceto o SharedFolder . Quando abro o SharedFolder , posso ver o seu conteúdo (que é um arquivo-txt e uma pasta), mas não consigo abrir esse arquivo (é o que a minha área de trabalho diz). O registro de reescrita mostra:
[webdav.example.com/sid#8ffd998][rid#9043870/initial] (2) rewrite '/webdav/fred/SharedFolder/Readme.txt/' -> '/sharedfolders/sales/indoor/'
[webdav.example.com/sid#8ffd998][rid#9043870/initial] (2) local path result: /sharedfolders/sales/indoor/
[webdav.example.com/sid#8ffd998][rid#9043870/initial] (2) prefixed with document_root to /var/www/sharedfolders/sales/indoor/
[webdav.example.com/sid#8ffd998][rid#9043870/initial] (1) go-ahead with /var/www/sharedfolders/sales/indoor/ [OK]
Quando eu leio o registro de reescrita, ele me diz que o arquivo (Readme.txt) não é reescrito no final para ser aberto.
O outro problema é abrir uma pasta dentro do SharedFolder . Eu vejo continuamente o conteúdo de SharedFolder dentro de si. A partir do disco WebDAV: SharedFolder/folder a/folder a/folder a/folder a
e assim por diante. Dentro de cada 'pasta a' também vejo o arquivo 'Readme.txt'. Veja o que o registro de reescrita tem a dizer sobre isso:
[webdav.example.com/sid#8ffd998][rid#905d898/initial] (2) rewrite '/SharedFolder/bla/bla/bla/' -> '/webdav/fred/SharedFolder/bla/bla/bla/'
[webdav.example.com/sid#8ffd998][rid#904b850/subreq] (2) init rewrite engine with requested uri /webdav/fred/SharedFolder/bla/bla/bla/
[webdav.example.com/sid#8ffd998][rid#904d858/subreq] (2) init rewrite engine with requested uri /webdav/fred/SharedFolder/bla/bla/bla/
[webdav.example.com/sid#8ffd998][rid#904d858/subreq] (2) rewrite '/webdav/fred/SharedFolder/bla/bla/bla/' -> '/webdav//webdav/fred/SharedFolder/bla/bla/bla/'
[webdav.example.com/sid#8ffd998][rid#904d858/subreq] (2) local path result: /webdav//webdav/fred/SharedFolder/bla/bla/bla/
[webdav.example.com/sid#8ffd998][rid#904d858/subreq] (2) prefixed with document_root to /var/www/webdav/webdav/fred/SharedFolder/bla/bla/bla/
[webdav.example.com/sid#8ffd998][rid#904d858/subreq] (1) go-ahead with /var/www/webdav/webdav/fred/SharedFolder/bla/bla/bla/ [OK]
Acredito que dei mais alguns passos, mas não o suficiente: -)
Algumas informações básicas: Inicialmente, tentei atingir o mesmo objetivo com o SharedFolder usando links simbólicos, mas isso parece impossível em combinação com o WebDAV ativado (não consegui fazê-lo funcionar).
SO: RHEL5.8
Versão do Apache: 2.2.3
Obrigado antecipadamente
UPDATE
Com as sugestões de @Jenny_D fiz algumas alterações. Atualizei minha configuração atual na seção code
desta questão. Coisas que eu mudei:
- Removamos o dólar 1 no final de
RewriteRule ^(.*)$ /sharedfolders/${usergroup:%{LA-U:REMOTE_USER}}
- Adicionou
[L]
no final da mesma linha.
- Alterou o
<Directory "/var/www/webdav">
para <Directory "/var/www">
para que o caminho reescrito (/ var / www / sharedfolders) também seja habilitado para DAV.
Esta última alteração (nº 3) fez uma grande diferença: agora posso ver o conteúdo do SharedFolder que coloquei anteriormente (sem o WebDAV).