2008-08-12 110 views
136

如何将HTTPS重定向到HTTP?也就是说,与每个人所教(看似)的情况相反。如何将HTTPS重定向到HTTP?

我对我却没有,并保持周围只为紧急情况下的HTTPS服务器为此我付出了SSL认证和镜子所以它不值得得到了认证。

在我的客户端桌面上,我有一些指向http://production_serverhttps://production_server(都是工作)的快捷方式。但是,我知道,如果我的生产服务器出现故障,然后在DNS转发踢和那些有客户“HTTPS”在他们的快捷方式将在https://mirror_server盯着(不工作)和大发的Internet Explorer 7的红色屏幕对我的公司不安。

不幸的是,我不能只在客户端级别切换这个局面。这些用户非常计算机文盲:并且很可能会因为看到HTTPS“不安全”错误而出现异常(特别是Firefox 3和Internet Explorer 7现在处理它的方式:FULL STOP,谢天谢地,但在这里没有帮助我LOL)。

这是very easyto findApache solutions对于​​,但对于我的生活,我不能做相反的事情。

想法?

回答

114

这还没有测试过,但我认为这应该工作使用mod_rewrite

RewriteEngine On 
RewriteCond %{HTTPS} on 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} 
+0

如何让它工作(我必须从此代码更改到我的域以使此代码工作)? – Enve 2013-01-09 18:59:09

+1

Enve:只需添加到您网站的vhost_ssl.conf配置(或站点根目录下的.htaccess)即可。没有什么需要改变的,它会动态地使用相同的主机名和URL路径。 – Meogi 2013-01-31 19:53:24

+1

我想你可能也想捕获查询字符串。我不确定,但我认为上面的代码片段不会将查询字符串从https转发到http。 – Rustavore 2013-05-14 22:22:12

64

记住,重写引擎只踢一次HTTP请求已被接收的 - 这意味着你仍然需要一个证书,以便客户端建立连接以发送请求!

但是,如果备份机器会出现有相同的主机名(至于客户而言),那么应该没有理由你不能使用相同的证书为主要生产机器。

-7

据我所知一个简单的元刷新的也适用,而不会导致错误:

<meta http-equiv="refresh" content="0;URL='http://www.yourdomain.com/path'"> 
11

基于ejunker的答案,这是为我工作的解决方案,而不是一个单一的服务器上,但在环境

Options +FollowSymLinks 
RewriteEngine On 
RewriteCond %{ENV:HTTPS} on 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
4

如果上述解决方案,为您的工作(他们没有为我)这里是我的服务器上的工作:

RewriteCond %{HTTPS} =on 
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L,R=301] 
6

对于那些正在使用.conf文件。

<VirtualHost *:443> 
    ServerName domain.com 
    RewriteEngine On 
    RewriteCond %{HTTPS} on 
    RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} 

    SSLEngine on 
    SSLCertificateFile /etc/apache2/ssl/domain.crt 
    SSLCertificateKeyFile /etc/apache2/ssl/domain.key 
    SSLCACertificateFile /etc/apache2/ssl/domain.crt 

</VirtualHost> 
1

如果可以,最好使用mod_rewrite来使用ovoid。 在你的情况我会用这个代替改写:

<If "%{HTTPS} == 'on'" > 
      Redirect permanent/http://production_server/ 
    </If> 

<If>指令仅可用于Apache 2。4+按本blog here

3

上述所有没有当我使用CloudFlare的工作,这个工作对我来说:

RewriteCond %{HTTP:X-Forwarded-Proto} =https 
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

,并没有代理这一块肯定工程的方式:

RewriteCond %{HTTPS} on 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
0

没有一个答案适用于我在WordPress的网站上,但以下作品(它类似于其他答案,但有一点变化)

RewriteEngine On 
RewriteCond %{HTTPS} on 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]