如何将 HTTPS 重定向到 HTTP?

如何将 HTTPS 重定向到 HTTP? 也就是说,与每个人(似乎)教授的内容相反。

我在 HTTPS 上有一个服务器,我为它支付了 SSL 认证,还有一个镜像,我没有为它支付 SSL 认证,我把它放在身边以备不时之需,所以它不值得我为它获得认证。

在我客户的桌面上,我有一些指向 http://production_serverhttps://production_server的快捷方式(两者都可以)。然而,我知道,如果我的生产服务器出现故障,那么 DNS 转发功能就会启动,那些快捷方式上有“ https”的客户端就会盯着 https://mirror_server(它不工作)和一个巨大的红色 Internet Explorer 7屏幕,让我的公司感到不安。

不幸的是,我不能在客户层面上改变这一点。这些用户对电脑一窍不通,看到 HTTPS“不安全”错误时很可能会抓狂(特别是火狐3和 Internet Explorer 7现在处理它的方式: 完全停止,谢天谢地,但对我没什么帮助,哈哈)。

对于 http->https redirection来说是 很简单 去寻找 阿帕奇解决方案,但是对于我来说,我不能做相反的事情。

有什么想法吗?

463957 次浏览

这还没有经过测试,但是我认为使用 mod _ rewrite 应该可以工作

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

请记住,重写引擎只有在接收到 HTTP 请求之后才会启动——这意味着您仍然需要一个证书,以便客户端设置连接来发送请求!

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

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

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

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

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

如果上面的解决方案都不适合你(对我来说不适合) ,这里是我的服务器上的解决方案:

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

对于那些使用 .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>

如果可以的话,最好避免使用 mod _ rewrite。

在你的例子中,我将用以下代码替换 Rewrite:

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

根据这个 博客在这里<If>指令仅在 Apache 2.4 + 中可用。

以上所有的方法在我使用 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]

在 WordPress 网站上,没有一个答案对我有用,但是下面的答案对我有用(和其他答案相似,但是有一点改变)

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

这对我有用。

<VirtualHost *:443>
ServerName www.example.com
# ... SSL configuration goes here
Redirect "https://www.example.com/" "http://www.example.com/"
</VirtualHost>


<VirtualHost *:80>
ServerName www.example.com
# ...
</VirtualHost>

一定要同时监听80和443端口。

如果您正在寻找一个答案,您可以重定向特定的网址/s 到 http,然后请更新您的 htaccess 如下

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{THE_REQUEST} !/(home/panel/videos|user/profile) [NC] # Multiple urls
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


RewriteCond %{HTTPS} on
RewriteCond %{THE_REQUEST} /(home/panel/videos|user/profile) [NC] # Multiple urls
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

这对我很有效:)