178

如何将 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 解决方案,但对于我来说,我不能做相反的事情。

想法?

4

11 回答 11

136

这尚未经过测试,但我认为这应该可以使用 mod_rewrite

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}
于 2008-08-12T00:48:49.577 回答
79

请记住,重写引擎仅在收到 HTTP 请求后才会启动 - 这意味着您仍然需要证书,以便客户端建立连接以发送请求!

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

于 2008-08-12T03:06:10.237 回答
12

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

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{ENV:HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
于 2013-01-24T08:32:49.343 回答
12

对于那些使用.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>
于 2015-12-01T18:50:39.153 回答
10

如果上述解决方案都不适合您(它们不适合我),那么这就是在我的服务器上起作用的方法:

RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L,R=301]
于 2013-02-21T00:27:08.423 回答
5

当我使用 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]
于 2017-03-08T18:02:31.783 回答
3

最好尽量避免使用 mod_rewrite。

在你的情况下,我会用这个替换重写:

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

根据此博客,<If>指令仅在 Apache 2.4+ 中可用。

于 2016-08-22T08:28:21.250 回答
3

这对我有用。

<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 端口。

于 2019-01-03T23:55:12.137 回答
1

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

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
于 2017-11-12T19:27:47.127 回答
0

如果您正在寻找可以将特定 url/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]

它对我有用:)

于 2021-02-18T06:29:42.707 回答
-7

据我所知,简单的元刷新也可以正常工作而不会导致错误:

<meta http-equiv="refresh" content="0;URL='http://www.yourdomain.com/path'">
于 2012-09-03T07:06:09.573 回答