如何在Apache 2.4上运行2个虚拟主机,其中一个使用端口80“no ssl”,另一个使用端口443“ssl”?

我在Windows Server 2008 R2和PHP 5.6.18上运行Apache 2.4.18。

我的Apache服务器默认情况下已打开SSL 。 我需要运行2个不同的站点,其中一个站点使用SSL ,另一个站点不使用SSL

这里是我已经添加到我的httpd-vhosts.conf文件,试图让它工作

 <VirtualHost *:80> ServerName SERVER1.example.com Redirect permanent "C:/phpsites/app1" https://sub1.example.com/ </VirtualHost> <VirtualHost *:80> DocumentRoot "C:/phpsites/app2/public" ServerName SERVER1.example.com ServerAlias sub2.example.com SSLEngine Off <Directory "C:/phpsites/app2/public"> AllowOverride All Require all Granted </Directory> </VirtualHost> <VirtualHost *:443> DocumentRoot "C:/phpsites/app1" ServerName SERVER1.example.com ServerAlias sub1.example.com SSLEngine On SSLCertificateFile "c:/Apache24/conf/certificate/cert.crt" SSLCertificateKeyFile "c:/Apache24/conf/certificate/private.key" <Directory "C:/phpsites/app1"> AllowOverride All Require all Granted </Directory> </VirtualHost> 

上述设置无法正常工作。 当我去**https**://sub1.example.com Apache将我redirect到正确的站点C:/phpsites/app1 。 当我去**http**://sub1.example.com它会将我redirect到C:/phpsites/app2/public但我不希望发生这种情况。 而当我去http://sub2.example.com时,出于某种原因,我被redirect到**https**://sub1.example.com

我需要将正在查找http://sub1.example.comhttps://sub1.example.com任何用户指向**https**://sub1.example.com

而任何正在查找http://sub2.example.comhttps://sub2.example.com用户都可以访问**http**://sub2.example.com

我怎样才能使这个工作?

更新

这是我执行httpd -D DUMP_VHOSTS时所得到的httpd -D DUMP_VHOSTS

VirtualHostconfiguration:

 *:80 is a NameVirtualHost default server SERVER1.example.com (C:/Apache24/conf/extra/httpd-vhosts.conf:27) port 80 namevhost SERVER1.example.com (C:/Apache24/conf/extra/httpd-vhosts.conf:27) port 80 namevhost SERVER1.example.com (C:/Apache24/conf/extra/httpd-vhosts.conf:34) alias sub2.example.com *:443 is a NameVirtualHost default server SERVER1.example.com (C:/Apache24/conf/extra/httpd-vhosts.conf:52) port 443 namevhost SERVER1.example.com (C:/Apache24/conf/extra/httpd-vhosts.conf:52) alias sub1.example.com port 443 namevhost SERVER1.example.com (C:/Apache24/conf/extra/httpd-ssl.conf:85) 

当我转到http://sub1.example.com时,它将我redirect到C:/ phpsites / app2 / public,但我不希望发生这种情况。

这是因为您只有一个(默认)http虚拟主机

 <VirtualHost *:80> DocumentRoot "C:/phpsites/app2/public" ServerAdmin [email protected] ServerName sub2.example.com ServerAlias sub2.example.com SSLEngine Off <Directory "C:/phpsites/app2/public"> AllowOverride All Require all Granted </Directory> </VirtualHost> 

您必须为sub1.example.com添加虚拟主机

 <VirtualHost *:80> ServerName sub1.example.com Redirect 301 / https://sub1.example.com/ </VirtualHost> 

下面这行真的很奇怪

 port 80 namevhost sub1.example.com (C:/Apache24/conf/extra/httpd-vhosts.conf:43) alias sub2.example.com 

你为什么在sub1虚拟主机中使用sub2作为别名?