【问题标题】:Apache HTTPS to HTTPS RedirectionApache HTTPS 到 HTTPS 重定向
【发布时间】:2011-08-18 12:01:00
【问题描述】:

我们有一个客户端服务器使用 RHEL 中的 Apache 2.2 和 Tomcat 6 托管我们的 Web 应用程序。我已经为 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.comhttps://test2.com

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

谢谢

【问题讨论】:

  • 您目前如何将http://test1.com 重定向到https://test2.com
  • 我正在使用 Rewrite 规则如下: RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://test2.com$1 [R=301]

标签: mod-rewrite https apache2


【解决方案1】:

我通过 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>

【讨论】:

  • 中间的步骤完全没用,它只会破坏加密的请求。最糟糕的是,用户甚至没有注意到他的连接没有一步加密。
【解决方案2】:

我有带有 https(证书)的 site1 和带有 http(没有证书)的 site2,两者都在同一个 IP(虚拟主机。 然后我注意到站点 2 被 Google 错误地索引为 https,使用站点 1 的内容。

同时用于 RewriteCond 监听

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

但随后区分不再通过端口,而是通过 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】:

    我通过重定向解决了这个问题,但我必须使用所有必要的 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>
    

    【讨论】:

    • 请将此答案标记为真。它绝对有效。
    • 这是正确答案。在我看来,如果没有有效证书,您就无法使用简单的 Apache 为两个站点重定向 https
    • 虽然我同意这是真的,但它并不适用于所有情况。就我而言,我们不再使用site2.com,并希望将任何合法流量重定向到site1.com。我们不想为了重定向工作而维护site2.com 的证书。
    【解决方案4】:

    尝试以下方法:

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

    如果&lt;VirualHost&gt;:80:443 都有&lt;VirualHost&gt;,则此重定向应适用于两种配置。

    【讨论】:

    • 感谢您的建议,但没有奏效。我们有第二个域的 ssl 证书,但没有第一个域。所以当我使用 https 访问第一个域时,它会引发安全警告。我想重定向到第二个域,无论是 http 还是 https。
    • @Noman Amir:这是不可能的,因为重定向是在 HTTP 层上完成的,而 SSL 在下面的层上工作。因此,在执行重定向之前,SSL 层必须已建立连接 - 这会导致安全警告。
    • @Robert:虽然令人失望,但非常感谢您提供的信息!有没有可能在收到安全警告后重定向?
    猜你喜欢
    • 2017-09-28
    • 2013-09-27
    • 2018-11-16
    • 2016-02-04
    • 2018-08-03
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    相关资源
    最近更新 更多