我有一个服务器与几个scponly帐户,我想在基本身份validation提供http访问。
问题的第一部分解决了,使用mod_rewrite为每个用户select合适的目录。 但是当我尝试为每个用户build立一个不同的auth用户文件时,问题就出现了。 只是我无法find如何做到这一点。
这是一个示例configuration。
<VirtualHost an-ip-number-and:a-port> ServerName *.example.com RewriteEngine On UseCanonicalName Off RewriteCond %{HTTP_HOST} ^(.*).example.com RewriteCond /server/scponly/%1/incoming -d RewriteRule ^(.+) %{SERVER_NAME}$1 [C] RewriteRule ^([^.]+)\.example\.com/(.*) /server/scponly/$1/incoming/$2 [L] RewriteRule ^(.+) http://FAIL.example.com <Directory /server/scponly/*/incoming> AuthType Basic AuthName "SFTP-HTTP Area" AuthUserFile ??????? # <-- this! require valid-user </Directory> </VirtualHost>
笔记:
为了扩大peelman的答案,你将不得不为每个用户分开一个部分:
<Directory /server/scponly/*/incoming> AuthType Basic AuthName "SFTP-HTTP Area" AuthUserFile /path/to/user/htpasswd </Directory> <Directory /server/scponly/bob/incoming> require user bob </Directory> <Directory /server/scponly/smith/incoming> require user smith </Directory>
一个彻底的方法是使用mod_perl,它允许你用perl来configurationapache。 这将在一个Apacheconfiguration文件:
<Perl> for $dir (glob "/server/scponly/*/incoming") { ($user) = $dir =~ m%/server/scponly/([^/]+)/incoming%; exists $Directory{$dir} or $Location{$dir} = { }; $Directory{$dir}{AuthType} = 'Basic'; $Directory{$dir}{AuthName} = 'SFTP-HTTP Area'; $Directory{$dir}{AuthUserFile} = '/path/to/htpasswd'; $Directory{$dir}{require} = "user $user"; } </Perl>
(写下我的头顶。)
咦? 你可以只有一个文件。 您只需将您的Require参数更改为userid而不是valid-user。 看到这里: Apache文档 。