假设我有一个域,比如说,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]