我想为 150 个用户托管一个网页。每个用户都会通过 url 拥有一个唯一的网页url/username/index.html
。这里用户名对于所有用户来说都是独一无二的,其余的一切仍然是通用的。
那么我需要在 Apache Server 中创建 150 个虚拟主机还是有其他出路?
答案1
您可以启用每个用户的 Web 目录mod_用户目录哪些地图
http://example.com/~username/index.html
到对应的文件
/home/username/public_html/index.html
默认在用户目录中。
要摆脱波浪号,您可以使用 Apache 的重写引擎并禁止访问所有以 es 开头的 URL,~
并使用Alias
es 将各个路径映射到其用户目录。
将其添加到您的 VirtualHost 配置中:
RewriteEngine On
# forbid URLs starting with /~
RewriteRule ^/~ - [F]
# map individual paths to user dirs
Alias /bart /home/bart/public_html
Alias /homer /home/homer/public_html
Alias /lisa /home/lisa/public_html
Alias /maggie /home/maggie/public_html
# ...
如果您不需要从您的 提供任何文件DocumentRoot
,您可以使用 1 个AliasMatch
而不是 150 个Alias
es:
# map all paths to user dirs
AliasMatch ^/([^/]+)(/.*)?$ /home/$1/public_html$2
您需要在您的服务器中启用mod_userdir
和,在 Debian 上,您可以通过重新启动来执行此操作。mod_rewrite
a2enmod
sudo a2enmod userdir rewrite
sudo service apache2 restart
答案2
这甚至无法通过虚拟主机完成,因为您需要不同的主机名(或端口)来区分它们。
这只是一台主机,具有针对不同用户的子目录。因此,您可能必须(或至少想要)为每个子目录设置不同的文件权限。