几天前,我对我的 Apache 做了一些更改,它的行为变得很奇怪。
对于 VirtualHost,我有 1 个条目
<VirtualHost *:80>
ServerName siteA.com
...
<Directory "/path/to/siteA.com">
</Directory>
</VirtualHost>
然后添加第二个:
<VirtualHost siteB.com:80>
ServerName siteB.com
...
<Directory "/path/to/siteB.com">
</Directory>
</VirtualHost>
如您所见,我将 *:80 替换为实际名称。结果是,如果您输入 siteA.com,您最终会看到 siteB.com 内容。地址栏仍会一直显示 siteA.com……但这是 siteB.com 内容。
(我之前关于为什么会发生这种情况的问题已经得到解答了..这是一个新问题)
我想以以下方式针对 3 个站点重现此行为:
siteA.com shows siteA.com <--- normal
siteB.com shows siteC.com <--- not normal
siteC.com shows siteC.com <--- normal
我所做的所有尝试最终都使所有站点都指向命名域。
我怎样才能做到这一点?
谢谢。
引用
答案1
您的 VirtualHost 指令需要与您的 NameVirtualHost 指令匹配。如果您有
NameVirtualHost *:80
然后他们都必须使用
<VirtualHost *:80>
如果你混淆了基于名称和基于 IP 的虚拟主机,那么你应该在所有地方使用实际的 IP 地址,而不是*
。请参阅注释这里。
答案2
使用您的示例和 DerfK 所说的内容,您可以DocumentRoot
向每个<VirtualHost *:80>
部分添加指令,然后使DocumentRoot
“SiteB.com”站点指向/path/to/siteC.com
:
<VirtualHost *:80>
ServerName siteA.com
DocumentRoot /path/to/siteA.com
...
<Directory "/path/to/siteA.com">
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName siteB.com
DocumentRoot /path/to/siteC.com
...
<Directory "/path/to/siteC.com">
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName siteC.com
DocumentRoot /path/to/siteC.com
...
<Directory "/path/to/siteC.com">
</Directory>
</VirtualHost>