Назад | Перейти на главную страницу

Можно ли написать файл htpasswd, который перенаправляет определенных пользователей в определенные каталоги?

Предполагая, что у меня есть домен, скажем, mydomain.com и три каталога под ним, назовите их dir1, dir2 и dir3, тогда можно ли поместить файл htpasswd в корневой каталог и перенаправить аутентифицированных пользователей в их соответствующие каталоги (например, пользователь joecorleone101 всегда перенаправляется на dir3 после аутентификации.)?

Во-первых, я хочу знать, возможно ли это, а во-вторых, безопасно или практично (или непрактично)? Я неправильно об этом думаю? Может, мне стоит использовать файл htaccess?

Apache mod_rewrite ваш друг, он может использовать заголовки HTTP.

RewriteEngine On
RewriteCond %{REMOTE_USER} ^joecorleone101$
RewriteRule .* dir3/ [R,L]
  • Если HTTP REMOTE_USER равен joecorleone101, используйте правило перезаписи
  • Матч против всего (. *)
  • Переписать url на dir3
  • [R] - перенаправление
  • [L] прекратить переписывать

Вы также можете использовать REMOTE_USER в части подстановки:

RewriteCond %{REMOTE_USER} ^.*$
RewriteRule .* %{REMOTE_USER}/ [R,L]
  • Если REMOTE_USER заполнен (^. * $), Используйте правило перезаписи
  • Матч против всего (. *)
  • Заменить url на значение в REMOTE_USER
  • [R] - перенаправление
  • [L] прекратить переписывать

Это также работает с .htaccess, но имеет некоторые отличия в поведении: каталог удаляется при сопоставлении с шаблоном и добавляется в части замены.

Чтобы использовать значение, сопоставленное в RewriteCond, вы можете использовать% N (1 <= N <= 9).

RewriteCond %{REMOTE_USER} (\d{3})$
RewriteRule .* http://www.example.com/%1 [R,L]
  • Сопоставлять с пользователями, имена которых заканчиваются на 3 цифры (\ d {3}) $
  • Соответствует любому заданному URL (. *)
  • Перепишите это на http://www.example.com/123 (если пользователь заканчивается на 123)
  • Перенаправить и прекратить перезапись [R, L]