É possível escrever um arquivo htpasswd que redirecione certos usuários para certos diretórios?

1

Supondo que eu tenha um domínio, digamos, mydomain.com e três diretórios sob ele, chame-os de dir1, dir2 e dir3, então é possível colocar um arquivo htpasswd na raiz da web e fazer com que ele redirecione os usuários autenticados para seus respectivos diretórios (por exemplo, o usuário joecorleone101 sempre é redirecionado para dir3 ao ser autenticado.)?

Antes de tudo, quero saber se isso é possível e, em segundo lugar, é seguro ou prático (ou impraticável)? Eu estou pensando nisso da maneira errada? Devo usar um arquivo htaccess?

    
por user41157 03.05.2010 / 22:09

1 resposta

2
O

Apache mod_rewrite é seu amigo, ele pode usar cabeçalhos HTTP.

RewriteEngine On
RewriteCond %{REMOTE_USER} ^joecorleone101$
RewriteRule .* dir3/ [R,L]
  • Se HTTP REMOTE_USER for igual a joecorleone101, use a regra de reescrita
  • Corresponder a tudo (. *)
  • Reescreva o URL para dir3
  • [R] redireciona
  • [L] parar de reescrever

Você também pode usar o REMOTE_USER na parte da subseção:

RewriteCond %{REMOTE_USER} ^.*$
RewriteRule .* %{REMOTE_USER}/ [R,L]
  • Se REMOTE_USER estiver preenchido (^. * $) use a regra de reescrita
  • Corresponder a tudo (. *)
  • Reescreva o URL para o valor em REMOTE_USER
  • [R] redireciona
  • [L] parar de reescrever

Isso também funciona a partir do .htaccess, mas tem algumas diferenças de comportamento, o diretório é removido na correspondência de padrões e adicionado na parte de substituição.

Para usar o valor correspondente no RewriteCond, você pode usar o% N (1 < = N < = 9).

RewriteCond %{REMOTE_USER} (\d{3})$
RewriteRule .* http://www.example.com/%1 [R,L]
  • Corresponder aos usuários cujo nome termina com 3 dígitos (\ d {3}) $
  • Corresponder a qualquer URL (. *)
  • Reescreva-o no link (se o usuário terminar com 123)
  • Redirecionar e parar de reescrever [R, L]
por 03.05.2010 / 22:34