apache - 如何将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处理它的方式:完全停止,有点谢天谢地,但没有帮助我这里大声笑)。

为http-> https重定向找到Apache解决方案非常容易,但对于我的生活,我不能做相反的事情。

想法?

9个解决方案
118 votes

这还没有经过测试,但我认为这应该可以使用mod_rewrite

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}
ejunker answered 2019-04-30T02:45:18Z
67 votes

请记住,一旦收到HTTP请求,Rewrite引擎才会启动 - 这意味着您仍然需要一个证书,以便客户端设置连接以发送请求!

但是,如果备份计算机看起来具有相同的主机名(就客户端而言),那么就没有理由不能使用与主生产计算机相同的证书。

Kieron answered 2019-04-30T02:45:49Z
10 votes

根据ejunker的回答,这是适合我的解决方案,不是在单个服务器上,而是在云环境中

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{ENV:HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
antoniom answered 2019-04-30T02:46:13Z
7 votes

对于那些使用.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>
Rick answered 2019-04-30T02:46:38Z
5 votes

如果以上解决方案都不适合您(他们不适合我)这里是我的服务器上的工作:

RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L,R=301]
Stuart answered 2019-04-30T02:47:02Z
4 votes

当我使用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]
mikulabc answered 2019-04-30T02:47:33Z
1 votes

最好避免在可能的情况下使用mod_rewrite。在你的情况下,我会用这个替换Rewrite:

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

<If>指令仅适用于Apache 2.4+,如本博客所示

sys0dm1n answered 2019-04-30T02:48:04Z
0 votes

这些答案在Wordpress网站上都不适用于我,但是后续工作(它与其他答案类似,但有一些变化)

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Yusef Mohamadi answered 2019-04-30T02:48:28Z
-8 votes

据我所知,简单的元刷新也可以在不引起错误的情况下工作:

<meta http-equiv="refresh" content="0;URL='http://www.yourdomain.com/path'">
RobinUS2 answered 2019-04-30T02:48:53Z
translate from https://stackoverflow.com:/questions/8371/how-do-you-redirect-https-to-http