如何将 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 重定向, ,但为了我的一生,我不能做相反的事情。

有想法吗?

有帮助吗?

解决方案

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

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

其他提示

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

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

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

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

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

如果上述解决方案都不适合您(它们不适合我),那么以下是在我的服务器上有效的解决方案:

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

当我使用 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]

最好尽可能避免使用 mod_rewrite。

在你的情况下,我将用以下内容替换重写:

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

<If> 根据此指令仅在 Apache 2.4+ 中可用 在这里写博客.

在 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。

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

<meta http-equiv="refresh" content="0;URL='http://www.yourdomain.com/path'">
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top