是否有可能编写一个htpasswd文件,将某些用户redirect到某些目录?

假设我有一个域,比如说mydomain.com,在它下面的三个目录叫做dir1,dir2和dir3,那么是否有可能把一个htpasswd文件放在web根目录下,然后让authentication用户redirect到他们各自的目录用户joecorleone101经过身份validation后总是被redirect到dir3)。

首先我想知道这是否可行,其次是安全还是实用(或不切实际)? 我在想这个错误的方法吗? 我应该使用一个htaccess文件?

Apache mod_rewrite是你的朋友,它可以使用HTTP头。

RewriteEngine On RewriteCond %{REMOTE_USER} ^joecorleone101$ RewriteRule .* dir3/ [R,L] 
  • 如果HTTP REMOTE_USER等于joecorleone101,则使用重写规则
  • 匹配所有(。*)
  • 重写url到dir3
  • [R]是redirect
  • [L]停止重写

您也可以在replace部分使用REMOTE_USER:

 RewriteCond %{REMOTE_USER} ^.*$ RewriteRule .* %{REMOTE_USER}/ [R,L] 
  • 如果REMOTE_USER已满(^。* $),则使用重写规则
  • 匹配所有(。*)
  • 将URL重写为REMOTE_USER中的值
  • [R]是redirect
  • [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结尾)
  • redirect并停止重写[R,L]