Как перенаправить HTTPS на HTTP?

как перенаправить HTTPS на HTTP?. То есть противоположность тому, чему (казалось бы) все учат.

у меня есть сервер на HTTPS, для которого я заплатил сертификацию SSL и зеркало, для которого я не имею и держусь только для чрезвычайных ситуаций, поэтому он не заслуживает получения сертификации.

на настольных компьютерах моего клиента у меня есть некоторые ярлыки, которые указывают на http://production_server и https://production_server (оба работают). Однако я знаю, что если мой производственный сервер отключится, то DNS переадресация начинается, и те клиенты, у которых есть "https" на их ярлыке, будут смотреть на https://mirror_server (что не работает) и большой толстый Internet Explorer 7 красный экран беспокойства для моей компании.

к сожалению, я не могу просто переключить это на уровне клиента. Эти пользователи очень неграмотны на компьютере: и, скорее всего, испугаются, увидев ошибки https "незащищенность" (особенно то, как Firefox 3 и Internet Explorer 7 обрабатывают его в настоящее время: полная остановка, вид к счастью, но не помогает мне здесь, ЛОЛ).

Это очень просто найти Apache solutions на http->перенаправление https, но для жизни меня я не могу сделать наоборот.

идеи?

9 ответов


Это не было протестировано, но я думаю, что это должно работать с помощью 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]

для тех, кто использует .

<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}/ [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]

насколько мне известно, простое обновление meta также работает без возникновения ошибок:

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