在我的 Ubuntu 16.04 系统上,我想设置多个网站,这些网站由多个目录提供服务,即相同的域、相同的端口、相同的 IP 地址。但是,我不知道如何指定它们。我能找到的所有说明都涵盖了为不同的域设置虚拟主机。
这就是我目前的进展:
/etc/apache2/sites/sites-enabled/site1.conf:
<VirtualHost *:80>
ServerName test.test
ServerAdmin webmaster@localhost
DocumentRoot /var/www/vhosts/site1/
<Directory /var/www/vhosts/site1/>
AllowOverride None
</Directory>
ErrorLog /var/log/apache2/error.log
</VirtualHost>
/var/www/vhosts/site1/index.html
<h1>site 1</h1>
/etc/apache2/sites/sites-enabled/site2.conf:
<VirtualHost *:80>
ServerName test.test
ServerAdmin webmaster@localhost
DocumentRoot /var/www/vhosts/site2/
<Directory /var/www/vhosts/site2/>
AllowOverride None
</Directory>
ErrorLog /var/log/apache2/error.log
</VirtualHost>
/var/www/vhosts/site2/index.html
<h1>site 2</h1>
当我将我的网络浏览器指向http://测试.测试,
地点 1
正在浏览器中显示。我如何/在哪里指定 hxxp://test.test/site1 应指向 /var/www/vhosts/site1/(index.html) 以及 hxxp://test.test/site2 应指向 /var/www/vhosts/site2/(index.html)?
奖励:hxxp://test.test 和可能的 hxxp://test.test/site3 应该指向其他地方。
答案1
我认为您无法实现自己的目标。Apache httpd 将为第一个具有与您的请求中的主机标头匹配的 SeverName 或 ServerAlias 的虚拟主机提供服务。如果没有明确匹配的虚拟主机,则将为定义的第一个虚拟主机提供服务。
考虑到上述情况,所有请求的主机头都将是 test.test,以便匹配您的第一个 vhost,并且 apache httpd 将尝试从相关的 Documentroot 提供其余的 url。
您可以尝试将第一个虚拟主机的文档根目录设置为高一级。您可以尝试使用 mod_rewrite 甚至反向代理来做一些事情。
答案2
你不能有多个虚拟主机正如您所描述的,因为它们都具有相同的名称和端口。
为什么不设定你的文档根目录和目录到/var/www/虚拟主机/?
这里拥有多个虚拟主机并不重要。
答案3
看来您没有正确设置 VirtualHost。
如果您希望将 site1 重定向到 /var/www/vhosts/site2,您的虚拟主机应如下所示:
<VirtualHost *hostnamesite1*:80>
ServerName test.test
ServerAdmin webmaster@localhost
DocumentRoot /var/www/vhosts/site1/
<Directory /var/www/vhosts/site1/>
AllowOverride None
</Directory>
ErrorLog /var/log/apache2/error.log
</VirtualHost>
<VirtualHost *hostnamesite2*:80>
ServerName test.test
ServerAdmin webmaster@localhost
DocumentRoot /var/www/vhosts/site2/
<Directory /var/www/vhosts/site2/>
AllowOverride None
</Directory>
ErrorLog /var/log/apache2/error.log
</VirtualHost>
答案4
您不能使用相同的域名来执行此操作。
虚拟主机 *:80
这部分是用于 test.test 的接口。例如,如果你有两个接口 10.0.0.2 和 10.0.0.3
虚拟主机 10.0.0.2:80
指向 apache 仅从 10.0.0.2 监听 test.test。
服务器名称 测试.测试
这表明你的 apache 可以获取主机名。因此,如果你在浏览器 test.test 中输入一个 apache 获取请求,它将从你的 DocumentRoot 给出正确的答案
所以我认为你需要像这样的子域名
site1.你的域名.com
和
site2.你的域名.com
那么你的配置文件必须是这样的
<VirtualHost *:80>
ServerName site1.yourdomain.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/vhosts/site1/
<Directory /var/www/vhosts/site1/>
AllowOverride None
</Directory>
ErrorLog /var/log/apache2/error.log
</VirtualHost>
和
<VirtualHost *:80>
ServerName site2.yourdomain.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/vhosts/site2/
<Directory /var/www/vhosts/site2/>
AllowOverride None
</Directory>
ErrorLog /var/log/apache2/error.log
</VirtualHost>
更新
没看到这部分
地点 1
hxxp://test.test/site2 应指向 /var/www/vhosts/site2/(index.html)
hxxp://test.test/site3 应该指向其他地方。
因此您需要别名并定义该别名的位置,在您的例子中,别名是 /site2 而 DocumentRoot 是 /var/www/vhosts/site2/
我谨此致以最诚挚的敬意并对所犯的错误表示歉意。