apache 2.4 在虚拟主机内重定向

apache 2.4 在虚拟主机内重定向

我有几个 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>

相关内容