地点 1

地点 1

在我的 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/

我谨此致以最诚挚的敬意并对所犯的错误表示歉意。

相关内容