我不确定如何用语言来问或描述我想要做什么,或者如果可以这样做,所以我决定画一个图。 希望它相当自我解释:

我知道我可以在端口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地址上工作,请尝试这样的事情
NameVirtualHost *:80 <VirtualHost _*:80> ServerAdmin webmaster@localhost ServerName foo-1.com ServerAlias www.foo1.com 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 *:80> DocumentRoot /var/www/foo-2.com ServerName foo-2.com ServerAlias www.foo-2.com <Directory "/var/www/foo-2.com"> allow from all Options -Indexes </Directory> </VirtualHost>
请注意,每个虚拟主机都有一个ServerName和ServerAlias
在第一次阅读你的场景时,我的第一个反应就是你为什么要这样做,就像其他的一样,但是用Apache或者PHP这样的东西是可能的。 如果虚拟主机在80端口上正常工作,这将会更好,因为这是访问者期望的,但这是我的意见。
要做你想完成的事情,有两个select,你必须觉得HTTPredirect必须发生。 没有办法绕过那一个。
你的第一个select是使用PHP的这个东西,如下所示…
Apache也支持重写选项,您可以按照以下方式为每个站点进行组织
# First host rewrite RewriteCond %{HTTP_HOST} ^www.\foo-1\.com$ [NC] RewriteRule ^(.*)$ http://www.foo-1.com:8080/$1 [L,R=301] # Second host rewrite RewriteCond %{HTTP_HOST} ^www.\foo-2\.com$ [NC] RewriteRule ^(.*)$ http://www.foo-2.com:8081/$1 [L,R=301]
但是,如果你要重写这个级别的话,可能会更容易找出Apache中的VHOSTS并使其在服务器上正常工作。