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

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

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

1 ответ

Решение

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]
Другие вопросы по тегам