Apache-2.2

是否可以編寫將某些使用者重定向到某些目錄的 htpasswd 文件?

  • May 4, 2010

假設我有一個域,例如 mydomain.com 和它下面的三個目錄,它們分別稱為 dir1、dir2 和 dir3,那麼是否可以將 htpasswd 文件放在 web 根目錄下,並將經過身份驗證的使用者重定向到他們各自的目錄(例如使用者 joecorleone101 在通過身份驗證後總是被重定向到 dir3。)?

首先我想知道這是否可能,其次它是安全的還是實用的(或不切實際的)?我想錯了嗎?我應該使用 htaccess 文件嗎?

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 $$

引用自:https://serverfault.com/questions/138165