我在 Windows Server 2008 R2 和 PHP 5.6.18 上运行 Apache 2.4.18。
我的 Apache 服务器默认已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 会将我重定向到正确的站点C:/phpsites/app1
。当我访问 时,**http**://sub1.example.com
它会将我重定向到C:/phpsites/app2/public
但我不想发生这种情况。而当我访问 时,由于某种原因http://sub2.example.com
,我被重定向到**https**://sub1.example.com
。
我需要引导任何正在寻找
http://sub1.example.com
或https://sub1.example.com
的用户**https**://sub1.example.com
。
任何正在寻找http://sub2.example.com
或https://sub2.example.com
想要访问的用户**http**://sub2.example.com
我怎样才能让它工作?
更新
这是我执行时得到的结果httpd -D DUMP_VHOSTS
VirtualHost 配置:
*: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)
答案1
当我去http://sub1.example.com 它将我重定向到 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 vhost 中使用 sub2 作为别名?