是否可以编写一个 htpasswd 文件,将特定用户重定向到特定目录?

是否可以编写一个 htpasswd 文件,将特定用户重定向到特定目录?

假设我有一个域,比如说,mydomain.com,它下面有三个目录,分别称为 dir1、dir2 和 dir3,那么是否可以将 htpasswd 文件放在 Web 根目录下,并让其将经过身份验证的用户重定向到他们各自的目录(例如,用户 joecorleone101 在经过身份验证后总是被重定向到 dir3)?

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

答案1

阿帕奇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]

相关内容