Apacheconfiguration的子域问题

我试图达到以下目的:

http:// site.com – >主站点(用www.site.com重写没有www)

https:// predeploy.site.com – >第二个站点(密码保护和SSL)

https:// site.com – >连接被拒绝

http:// predeploy.site.com – >连接被拒绝

子域的DNS由Alogging而不是CNAME完成,因为它们显然是Linode名称服务器的首选方法。 site.com和predeploy.site.com都parsing为相同的IP。

我有两个虚拟主机设置:

NameVirtualHost *:80 <VirtualHost *:80> ServerName site.com ServerAlias www.site.com DocumentRoot /var/www/site.com RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L] </VirtualHost> NameVirtualHost *:443 <VirtualHost *:443> ServerName predeploy.site.com DocumentRoot /var/www/predeploy.site.com SSLEngine on ... # Basic auth and SSL stuff, which works </VirtualHost> 

问题是https:// site.com提供了第二个站点(与https:// predeploy.site.com相同,并且需要身份validation),而http:// predeploy.site.com提供了主站点与http:// site.com相同)。 我相信这意味着这些鬼是错误的。 我如何解决它们?

它的行为就像你configuration它。 让我解释:

SSL基于端口,除非您使用UCC证书,否则“NameVirtualHost”实际上并不存在于SSL下。 这意味着,如果您为两个站点使用相同的IP地址,它将始终显示您configuration的SSL站点,因为它绑定在端口上。

您并未为predeploy.site.com为端口80创buildVirtualHost,这意味着它将默认为第一个端口。 如果您希望在不使用SSL的情况下进行预先部署以redirect到预先部署WITH SSL,则需要在端口80上为其创build虚拟主机,然后在该虚拟主机中执行redirect。