web-dev-qa-db-ja.com

特定のユーザーを特定のディレクトリにリダイレクトするhtpasswdファイルを作成することは可能ですか?

たとえば、mydomain.comというドメインがあり、その下に3つのディレクトリがdir1、dir2、dir3と呼ばれているとすると、htpasswdファイルをWebルートに配置して、認証されたユーザーをそれぞれのディレクトリにリダイレクトすることができます(例:ユーザーjoecorleone101は、認証されると常にdir3にリダイレクトされます。)?

まず第一に、これが可能かどうかを知りたいのですが、第二に、それは安全か実用的(または非実用的)ですか?私はそれを間違った方法で考えていますか?多分htaccessファイルを使うべきですか?

1
user41157

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/12 (ユーザーが123で終わる場合)に書き換えます。
  • リダイレクトして書き換えを停止します[R、L]
2
basvdlei