2011-05-04 195 views
7

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

我已经尝试过虚拟主机,ServerAlias,NameVirtualHost,但没有任何工作。如果我们可以通过重写来处理这个问题,任何建议都会有帮助。任何其他可能导致解决这个问题的指针将不胜感激。

感谢

+0

您目前如何对'http:// test1.com'重定向到'https:// test2.com'? – clmarquart 2011-05-04 12:39:27

+0

我使用重写规则如下: RewriteEngine叙述在 的RewriteCond%{HTTPS}关闭 重写规则^ $ HTTPS(*):// test2.com $ 1 [R = 301] – 2011-05-04 13:24:58

回答

4

尝试以下操作:

RewriteEngine On 

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

如果你有两个:80:443一个<VirualHost>,此重定向应该在这两种配置。

+0

Thx的建议,但它没没有工作。我们对第二域有ssl证书,但对第一域没有。因此,当我使用https访问第一域时,它会引发安全警告。我希望重定向到第二域,而不管http或https。 – 2011-05-04 14:02:11

+1

@Noman Amir:这是AFAIK不可能的,因为重定向是在HTTP层完成的,而SSL在下面的层上工作。因此,在可以执行重定向之前,SSL层必须建立连接 - 这会导致安全警告。 – Robert 2011-05-04 15:06:53

+0

@Robert:尽管这是令人失望的,真的非常感谢这些信息!安全警告后我是否可以重定向? – 2011-05-04 15:22:25

0

我SITE1以https(证书),并用HTTP(无证书)站点2,都在同一个IP(虚拟主机。 后来我noteiced该站点2是由谷歌得到正确索引对于HTTPS,使用site1的内容。

虽然对于听的RewriteCond

  • 端口80,重定向需要 静坐在.htaccess为SITE2,
  • 端口443,重定向需要 静坐在.htaccess的site1的。

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

对我来说,site1 = shop.smartgart.com,site2 = one0.com。 我把这个到站点1的.htaccess:

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

那就是:如果正在处理的HTTP_HOST不SITE1,然后重定向到site1的,使用附带的后缀($ 1)。

适合我!

2

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

<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> 
+0

请将此答案标记为true。它绝对有效。 – weiglt 2017-09-02 06:35:35