我不确定如何用语言来询问或描述我正在尝试做的事情,或者是否可以通过这种方式完成,所以我决定画一个图表。希望它相当自我解释:
我知道我可以在端口 80 上做所有基于命名的虚拟主机,但是我可以将它们放在不同的端口上并让服务器计算出哪个命名主机是哪个以及它们在哪个端口上吗?
<VirtualHost _default_:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/foo-1.com
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/foo-1.com/>
Options -Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
</VirtualHost>
<VirtualHost _default_:80>
DocumentRoot /var/www/foo-2.com
ServerName foo-2.com
<Directory "/var/www/foo-2.com">
allow from all
Options -Indexes
</Directory>
</VirtualHost>
要让两个基于名称的虚拟主机在同一个 IP 地址上工作,请尝试这样的事情
请注意,每个虚拟主机都有一个ServerName和ServerAlias
在第一次阅读您的场景时,我的第一反应是为什么您要像其他人一样以这种方式进行操作,但是对于 Apache 或 PHP,这样的事情是可能的。让虚拟主机在端口 80 上正常工作会好得多,因为这是网站访问者所期望的,但这是我的意见。
要完成您想完成的事情,有两种选择,您必须对必须发生的 HTTP 重定向感到满意。没办法绕过那个。
您的第一个选择是为此使用 PHP,如下所示...
Apache 也支持重写选项,您可以按以下方式为每个站点组织此选项
然而,如果你打算在重写条件下达到这个级别,那么在 Apache 中找出 VHOSTS 并让它在你的服务器上正常工作可能会更容易。