Apache HTTPS到HTTPS重定向

时间:2011-05-04 12:18:55

标签: mod-rewrite https apache2

我们有一个客户端服务器使用Apache 2.2&amp ;;托管我们的Web应用程序。 RHEL中的Tomcat 6。我已经为http到https重定向设置了apache重写规则,它工作正常。我们有两个用于访问同一应用程序的DNS名称。 Test1.com和Test2.com。我希望所有用户尝试访问http:// test1.com或https:// test1.com到https:// test2.com。如上所述,http:// test1.com到https:// test2.com重定向工作正常。我无法将https://test1.com实施为https://test2.com

我尝试过Virtual Hosts,ServerAlias,NameVirtualHost,但没有任何效果。如果我们可以通过重写处理这个建议会有所帮助。任何其他可能导致解决此问题的指针将不胜感激。

由于

4 个答案:

答案 0 :(得分:8)

尝试以下方法:

 RewriteEngine On 

 RewriteCond %{HTTP_HOST} test1.com$
 RewriteRule ^(.*)$ https://test2.com$1 [L,NC,R=301]

如果<VirualHost>:80都有:443,则此重定向应该同时适用于这两种配置。

答案 1 :(得分:5)

我通过重定向解决了这个问题,但是我必须使用所有必要的ssl设置为https重定向设置虚拟主机。

<VirtualHost *:80>
    ServerName test1.com
    Redirect "/" "https://test2.com/"
</VirtualHost>

<VirtualHost *:443>
    ServerName test1.com
    Redirect "/" "https://test2.com/"
    SSLEngine on
    # SSLProxyEngine On
    SSLCertificateFile /path/site.crt
    SSLCertificateKeyFile /path/site.key
    SSLCertificateChainFile /path/DigiCertCA.crt
    SSLProtocol ALL -SSLv2 -SSLv3
    SSLHonorCipherOrder on
    SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
</VirtualHost>

<VirtualHost *:443>
    ServerName test2.com
    ...
    SSLEngine on
    # SSLProxyEngine On
    SSLCertificateFile /path/site.crt
    SSLCertificateKeyFile /path/site.key
    SSLCertificateChainFile /path/DigiCertCA.crt
    SSLProtocol ALL -SSLv2 -SSLv3
    SSLHonorCipherOrder on
    SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
</VirtualHost>

答案 2 :(得分:0)

我有一个带有https(证书)的site1和带有http(没有证书)的site2,两者都在同一个IP(虚拟主机上)。 然后我注意到,使用site1的内容,Google2对https进行了错误的索引索引。

为RewriteCond倾听

  • 对于端口80,重定向需要 坐在.htaccess for site2,
  • 对于端口443,重定向需要 坐在.htaccess for site1。

但是歧视不再是通过端口而是通过HTTP_HOST(DNS名称)。

对我来说,site1 = shop.smartgart.com,site2 = one0.com。 我把它放到了site1的.htaccess:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^shop.smartgart.com$
RewriteRule ^(.*)$ https://shop.smartgart.com/$1 [R=301,L]

即:如果正在处理的HTTP_HOST不是site1,则使用提供的后缀($ 1)重定向到site1。

适合我!

答案 3 :(得分:0)

我使用MULTIPLE重定向解决了这个问题,这与@A Kunin的答案不同。 因为我在两个站点上都使用了不同的证书,所以如果我只是从httpS://test1.com重定向到httpS://test2.com,它将报告证书错误。

我的解决方法是:httpS://test1.com-> http://test1.com-> httpS://test2.com

<VirtualHost *:80>
    ServerName test1.com
    Redirect "/" "https://test2.com/"
</VirtualHost>

<VirtualHost *:443>
    ServerName test1.com

    #### The Tricky ####
    Redirect "/" "http://test2.com/"

    SSLEngine on
    # SSLProxyEngine On
    SSLCertificateFile /path/site1.crt
    SSLCertificateKeyFile /path/site1.key
    SSLCertificateChainFile /path/DigiCertCA1.crt
    SSLProtocol ALL -SSLv2 -SSLv3
    SSLHonorCipherOrder on
    SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
</VirtualHost>

<VirtualHost *:443>
    ServerName test2.com
    ...
    SSLEngine on
    # SSLProxyEngine On
    SSLCertificateFile /path/site2.crt
    SSLCertificateKeyFile /path/site2.key
    SSLCertificateChainFile /path/DigiCertCA2.crt
    SSLProtocol ALL -SSLv2 -SSLv3
    SSLHonorCipherOrder on
    SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
</VirtualHost>