通过Apache虚拟主机访问多个站点-找不到404

通过Apache虚拟主机访问多个站点-找不到404,apache,server,Apache,Server,我整晚都在想这个问题,但无论我看了多少教程和资源,都没有成功 我的目标是能够在一台运行apache服务器上访问两个不同的网站 最终目标是这样的(使用本地ip) 192.168.1.8/site1->第一个站点 192.168.1.8/站点2->第二站点 我已经在httpd.conf中包含了以下内容 <VirtualHost *:80> DocumentRoot "/root/sites/site1" ServerName site1 </Virt

我整晚都在想这个问题,但无论我看了多少教程和资源,都没有成功

我的目标是能够在一台运行apache服务器上访问两个不同的网站

最终目标是这样的(使用本地ip)

192.168.1.8/site1->第一个站点 192.168.1.8/站点2->第二站点

我已经在httpd.conf中包含了以下内容

<VirtualHost *:80>
        DocumentRoot "/root/sites/site1"
        ServerName site1
</VirtualHost>
<VirtualHost *:80>
        ServerName site2
        DocumentRoot "/root/sites/site2"
</VirtualHost>

有人能发现我遗漏了什么吗?

名称虚拟主机是按名称而不是IP地址访问的。通过配置,您已经告诉Apache侦听到主机名“site1.example.com”和“site2.example.com”的传入连接(将您自己的域替换为“example.com”)

如果没有名称来区分它们,就不能让两个虚拟主机侦听同一IP地址和同一端口。当您转到时,Apache无法知道您是打算访问site1还是site2。因此,它会将您发送到第一个匹配的主机,这是配置中的第一个
。然后它接受您对
/site1
的请求,并将其附加到第一个VirtualHost的DocumentRoot。但由于您没有
/root/sites/site1/site1
目录,因此会出现404错误

有两种选择

您可以在两个不同的端口上运行这两个VirtualHost

<VirtualHost *:80>
    DocumentRoot "/root/sites/site1"
    ...
</VirtualHost>

<VirtualHost *:8080>
    DocumentRoot "/root/sites/site2"
    ...
</VirtualHost>
然后构造文件系统,使site1的内容位于
/root/sites/site1
下,site2位于
/root/sites/site2
下。然后URL
http://192.168.1.8/site1
http://192.168.1.8/site2
将自动工作

您可能还能够制定一些
mod_rewrite
规则,但这将变得更加复杂

<VirtualHost *:80>
    DocumentRoot "/root/sites/site1"
    ...
</VirtualHost>

<VirtualHost *:8080>
    DocumentRoot "/root/sites/site2"
    ...
</VirtualHost>
DocumentRoot "/root/sites"