如何将HTTPS重定向到HTTP?

mau*_*ana 162 apache ssl https redirect

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

我在HTTPS上有一台服务器,我为此支付了SSL认证和镜像,我没有并且只是为了紧急情况而保留,所以它不值得获得认证.

在我的客户端桌面上,我有一些快捷方式指向http://production_serverhttps://production_server(两者都有效).但是,我知道如果我的生产服务器出现故障,那么DNS转发就会启动,那些在其快捷方式上有"https"的客户端将会盯着https://mirror_server(这不起作用)和一个胖胖的Internet Explorer 7红屏不安为我的公司.

不幸的是,我不能只在客户端级别切换它.这些用户非常不懂计算机:并且非常有可能因为看到HTTPS"不安全"错误而感到恐惧(特别是现在Firefox 3和Internet Explorer 7处理它的方式:完全停止,有点谢天谢地,但没有帮助我这里大声笑).

这是很容易 找到 的Apache的解决方案基于HTTP> HTTPS重定向,但对我的生活,我不能反其道而行之.

想法?

eju*_*ker 125

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

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}
Run Code Online (Sandbox Code Playgroud)

  • 如下面的Kieron所指出的,如果镜像服务器没有有效的证书,这将不起作用.由于证书无效,您仍会看到一个大的红色警告.一旦你开始使用https,你基本上坚持使用它.准备好在你的余生中付出代价.如果您停止付款,则为https链接添加书签的用户将无法通过. (12认同)
  • Enve:只需添加到您站点的 vhost_ssl.conf 配置(或站点根目录中的 .htaccess)。无需更改任何内容,它将动态使用相同的主机名和 url 路径。 (2认同)
  • 我认为您可能还想捕获查询字符串。我不确定,但我认为上面的代码片段不会将查询字符串从 https 转发到 http。 (2认同)
  • 支付你的余生?您仍然可以使用 HTTPS,但要更改您的 PKI 提供商并获得新的更便宜的证书。您仍然会支付几美元是的,但您的域名和托管也是如此!与域名相比,PKI 证书现在并不昂贵,与托管/带宽成本相比微不足道! (2认同)

Kie*_*ron 71

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

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

  • 如何克服这一限制?我有同样的问题。在重定向之前从浏览器获取证书错误。 (2认同)
  • 这完全违背了使用 HTTPS 的初衷 (2认同)

ant*_*iom 11

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

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


Ric*_*ick 8

对于那些使用.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>
Run Code Online (Sandbox Code Playgroud)


rg8*_*g88 7

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

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

  • 很多时候,你不会想要`L,`(这意味着"最后一条规则").如果您使用的是wordpress或其他CMS,则"L"标志可能会阻止页面请求被正确路由.而是使用:`RewriteRule ^(.*)$ http://%{HTTP_HOST}/$ 1 [R = 301]` (6认同)

mik*_*abc 5

当我使用 cloudflare 时,上述所有内容都不起作用,这个对我有用:

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

这个绝对可以在没有代理的情况下工作:

RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Run Code Online (Sandbox Code Playgroud)