Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mod rewrite Apache HTTPS到HTTPS重定向_Mod Rewrite_Https_Apache2 - Fatal编程技术网

Mod rewrite Apache HTTPS到HTTPS重定向

Mod rewrite Apache HTTPS到HTTPS重定向,mod-rewrite,https,apache2,Mod Rewrite,Https,Apache2,我们有一个客户机服务器,在RHEL中使用Apache2.2和Tomcat6托管我们的web应用程序。我已经为http到https重定向设置了apache重写规则,它可以正常工作。我们有两个用于访问同一应用程序的DNS名称。Test1.com和Test2.com。我希望所有试图访问http://test1.com或https://test1.com到https://test2.com的用户。如前所述,从http://test1.com到https://test2.com的重定向工作正常。我无法实现

我们有一个客户机服务器,在RHEL中使用Apache2.2和Tomcat6托管我们的web应用程序。我已经为http到https重定向设置了apache重写规则,它可以正常工作。我们有两个用于访问同一应用程序的DNS名称。Test1.com和Test2.com。我希望所有试图访问http://test1.com或https://test1.com到https://test2.com的用户。如前所述,从http://test1.com到https://test2.com的重定向工作正常。我无法实现

我尝试过虚拟主机、服务器别名、NameVirtualHost,但都不起作用。如果我们能通过重写处理此问题,任何建议都会有所帮助。任何可能导致该问题解决的其他建议都将不胜感激

谢谢

请尝试以下操作:

 RewriteEngine On 

 RewriteCond %{HTTP_HOST} test1.com$
 RewriteRule ^(.*)$ https://test2.com$1 [L,NC,R=301]
如果您对
:80
:443
都有
,则此重定向应在两种配置中进行。

我在同一IP(虚拟主机)上有带https(证书)的site1和带http(无证书)的site2。 然后我注意到,Google使用site1的内容为site2编制了错误的https索引

同时进行第二次听力练习

  • 对于端口80,重定向需要 坐在site2的.htaccess中
  • 对于端口443,重定向需要 坐在site1的.htaccess中
但是,区别不再是通过端口,而是通过HTTP_主机(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_主机不是site1,则使用提供的后缀($1)重定向到site1


适合我!

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

ServerName test1.com
重定向“/”https://test2.com/"
ServerName test1.com
重定向“/”https://test2.com/"
斯伦金安
#SSLProxyEngine打开
SSLCertificateFile/path/site.crt
SSLCertificateKeyFile/path/site.key
SSLCertificateChainFile/path/DigiCertCA.crt
SSLProtocol ALL-SSLv2-SSLv3
SSLHonorCipherOrder开启
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
ServerName test2.com
...
斯伦金安
#SSLProxyEngine打开
SSLCertificateFile/path/site.crt
SSLCertificateKeyFile/path/site.key
SSLCertificateChainFile/path/DigiCertCA.crt
SSLProtocol ALL-SSLv2-SSLv3
SSLHonorCipherOrder开启
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH

我通过多次重定向解决了这个问题,与@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>

ServerName test1.com
重定向“/”https://test2.com/"
ServerName test1.com
####棘手的####
重定向“/”http://test2.com/"
斯伦金安
#SSLProxyEngine打开
SSLCertificateFile/path/site1.crt
SSLCertificateKeyFile/path/site1.key
SSLCertificateChainFile/path/DigiCertCA1.crt
SSLProtocol ALL-SSLv2-SSLv3
SSLHonorCipherOrder开启
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
ServerName test2.com
...
斯伦金安
#SSLProxyEngine打开
SSLCertificateFile/path/site2.crt
SSLCertificateKeyFile/path/site2.key
SSLCertificateChainFile/path/DigiCertCA2.crt
SSLProtocol ALL-SSLv2-SSLv3
SSLHonorCipherOrder开启
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH

您目前如何执行
http://test1.com
https://test2.com
?我使用的重写规则如下:RewriteEngine On RewriteCond%{HTTPS}off RewriteRule^(.*)$HTTPS://test2.com$1[R=301]Thx的建议,但它没有工作。我们有第二个域的ssl证书,但第一个域没有。因此,当我使用https访问第一个域时,它会抛出安全警告。我想重定向到第二个域,而不管http或https。@Noman Amir:这是不可能的,因为重定向是在http层上完成的,而ssl在下面的层上工作。因此,在执行重定向之前,SSL层必须已建立连接-这会导致安全警告。@罗伯特:尽管这令人失望,但非常感谢您提供的信息!是否有可能在安全警告后重定向?请将此答案标记为true。它绝对有效。这是正确的答:在我看来,如果没有两个站点的有效证书,你不能用简单的APACH重定向https。虽然我同意这是真的,但它并不适用于所有情况。在我的情况下,我们不再使用,希望任何合法的流量被重定向到。我们不希望为了重定向工作而必须维护证书。Th中间的e步是完全无用的,它只会破坏加密的请求。最糟糕的是,用户甚至没有注意到他的连接一步都没有加密。