使用 Ubuntu 16.04 和 Apache 2.4.7 我想创建两种不同类型的用户目录。
- 数据
/home/user/public_html/
仅可通过 www.sample.com/~user/ 进行访问。(www2.sample.com/~user/ 不起作用。) - 数据
/home/user/public_html2/
仅可通过 www2.sample.com/~user/ 进行访问。(www.sample.com/~user/ 不起作用。)
我使用 /etc/apache2/sites-availabile/000-default.conf 完成了两个虚拟主机的设置,然后尝试修改 mods-available/userdir.conf。很容易使 public_html 或 public_html2 可访问,但无法使用不同的主机名使两者可访问。你能教我怎么做吗?
我无法按原样编写代码,但是 000-default.conf 和 userdir.conf 是这样的:
000-默认.conf
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/html/www
ServerName www.sample.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</irtualHost>
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/html/www2
ServerName www2.sample.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</irtualHost>
userdir.conf(此代码的前半部分是原始的userdir.conf。我只是将其复制并粘贴在原始代码下方,并将public_html更改为public_html2。)
<IfModule mod_userdir.c>
UserDir public_html
UserDir disabled root
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit Indexes
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS>
Require all granted
</Limit>
<LimitExcept GET POST OPTIONS>
Require all denied
</LimitExcept>
</Directory>
</IfModule>
<IfModule mod_userdir.c>
UserDir public_html2
UserDir disabled root
<Directory /home/*/public_html2>
AllowOverride FileInfo AuthConfig Limit Indexes
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS>
Require all granted
</Limit>
<LimitExcept GET POST OPTIONS>
Require all denied
</LimitExcept>
</Directory>
</IfModule>
答案1
我不确定我是否 100% 理解了您的问题,但我假设您要求拥有 2 个不同的域,每个域都使用不同的 UserDir。
编辑:您走在正确的轨道上。您唯一缺少的是,您需要将两个 UserDir 配置分别放入其各自的 VirtualHost 配置中,如下所示。
为此,您需要创建两个虚拟主机,并且每个虚拟主机都有自己的 UserDir 配置。
第一个虚拟主机将包含以下内容:
# /etc/apache2/sites-available/com.sample.www.conf
<VirtualHost *:80>
ServerName www.sample.com
<IfModule mod_userdir.c>
UserDir public_html
UserDir disabled root
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit Indexes
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS>
Require all granted
</Limit>
<LimitExcept GET POST OPTIONS>
Require all denied
</LimitExcept>
</Directory>
</IfModule>
</VirtualHost>
第二个虚拟主机将包含以下内容:
# /etc/apache2/sites-available/com.sample.www2.conf
<VirtualHost *:80>
ServerName www2.sample.com
UserDir public_html2
<IfModule mod_userdir.c>
UserDir disabled root
<Directory /home/*/public_html2>
AllowOverride FileInfo AuthConfig Limit Indexes
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS>
Require all granted
</Limit>
<LimitExcept GET POST OPTIONS>
Require all denied
</LimitExcept>
</Directory>
</IfModule>
</VirtualHost>
完成后,您需要启用 2 个虚拟主机配置文件并重新启动 Apache。
$ sude a2dissite 000-default.conf
$ sudo a2ensite com.sample.www.conf
$ sudo a2ensite com.sample.www2.conf
$ sudo apache2ctl restart
现在,当你打开时www.sample.com/~dan/
它将使用/home/dan/public_html/
,当你打开时www2.sample.com/~dan/
它将使用/home/dan/public_html2/
答案2
如果您尝试在一个主机名上进行多站点,则可以使用 userdir 模块。您可以使用浏览器通过 /~username 访问用户主目录。在您的代码底部 * 地址为用户主目录下的 public_html 文件夹。因此无需在 userdir.conf 中添加第二个或更多目录标签。详细信息:https://httpd.apache.org/docs/current/en/mod/mod_userdir.html
...
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit Indexes
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS>
Require all granted
</Limit>
<LimitExcept GET POST OPTIONS>
Require all denied
</LimitExcept>
</Directory>
...