我有几个http(端口80)的虚拟主机,我想redirect到http如果一个https请求是对他们。 显然有些事情已经改变了Apache 2.4(NameVirtualHost不像以前那样使用,等等)。
Apache 2.4上centos 5.5,这是所有使用单一的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提供内容。 我希望任何https端口443上的www.dom1.com请求只需redirect到端口80上的http://www.dom1.com 。
谢谢
以上听443加(如果没有在别处定义)
NameVirtualHost *:443
然后在虚拟主机for webmail.dom2.com:443之前添加这个虚拟主机redirect
<VirtualHost *:443> ServerName www.dom1.com ServerAlias dom1.com RewriteEngine On RewriteCond %{SERVER_PORT} 443 RewriteRule ^/(.*)$ http://www.dom1.com/$1 [R] </VirtualHost>
我认为改变httpd-ssl.conf“listen 443”一行到“listen webmail.ip:443”可能会有所帮助,这样dot1.com的stream量永远不会来到webmail。
我正在使用重写规则在我的一台服务器上执行此操作。 应该是微不足道的只是改变它:
<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>