我有几个 http(端口 80)虚拟主机,如果向它们发出 https 请求,我想将它们重定向到 http。显然,Apache 2.4 中有些东西已经发生了变化(NameVirtualHost 不再像过去那样使用,等等)。
centos 5.5 上的 Apache 2.4,下面所有的 vhost 都使用一个 ip,我在这个盒子上没有多个 ip,
我的 /usr/local/apache2/conf/extra/httpd-vhosts.conf:
#<VirtualHost www.dom1.com:80>
ServerName www.dom1.com
ServerAlias dom1.com
DocumentRoot /usr/local/apache2/htdocs/dom1/wordpress
</VirtualHost>
<VirtualHost webmail.dom2.com:443>
ServerName webmail.dom2.com
DocumentRoot /usr/local/apache2/htdocs/webmail
SSLEngine On
SSLCertificateFile /usr/local/apache2/webmail.crt
SSLCertificateKeyFile /usr/local/apache2/webmail.key
</VirtualHost>
#
我的 /usr/local/apache2/conf/extra/httpd-ssl.conf,
#Listen 443
SSLPassPhraseDialog builtin
SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout 300
Mutex default
SSLRandomSeed startup file:/dev/urandom 512
SSLRandomSeed connect builtin
SSLCryptoDevice builtin
#
webmail.dom2.com 运行正常。问题是我可以连接到https://www.dom1.com,它提供来自 webmail.dom2.com 的内容。我希望在端口 443 上对 www.dom1.com 的任何 https 请求都重定向到http://www.dom1.com在端口 80 上。
谢谢
答案1
在 Listen 443 上方添加(如果未在其他地方定义)
NameVirtualHost *:443
然后在 webmail.dom2.com:443 的虚拟主机之前使用重定向添加此虚拟主机
<VirtualHost *:443>
ServerName www.dom1.com
ServerAlias dom1.com
RewriteEngine On
RewriteCond %{SERVER_PORT} 443
RewriteRule ^/(.*)$ http://www.dom1.com/$1 [R]
</VirtualHost>
答案2
我认为将 httpd-ssl.conf 中的“listen 443”行改为“listen webmail.ip:443”可能会有帮助。这样,dot1.com 的流量就永远不会进入 webmail。
答案3
我在我的一台服务器上使用重写规则以相反的方式执行此操作。只需更改它即可:
<VirtualHost *:80>
RewriteEngine On
# Rewrite HTTPS
RewriteCond %{HTTPS} !=on
RewriteCond %{SERVER_PORT} 80
RewriteCond %{HTTP_HOST} ^(.*)$
RewriteRule ^/(.*)$ https://%1/$1 [R]
</VirtualHost>
<VirtualHost *:443>
[...]
</VirtualHost>