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

Как вы перенаправляете HTTPS на HTTP?. То есть противоположность тому, чему (по-видимому) учит каждый.

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

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

К сожалению, я не могу просто переключить это на уровне клиента. Эти пользователи очень неграмотны в компьютерах: и, скорее всего, они увидят ошибки HTTPS "незащищенности" (особенно то, как Firefox 3 и Internet Explorer 7 обрабатывают ее в настоящее время: ПОЛНОСТЬЮ ОСТАНОВИТЬ, к счастью, но не помогая мне здесь LOL).

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

Идеи?

Ответ 1

Это не было протестировано, но я думаю, что это должно работать с помощью mod_rewrite

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

Ответ 2

Имейте в виду, что движок Rewrite запускается только после того, как был получен запрос HTTP, что означает, что вам все равно нужен сертификат, чтобы клиент мог настроить соединение для отправки запроса!

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

Ответ 3

На основе ответа ejunker это решение работает для меня, а не на одном сервере, но в среде облако

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

Ответ 4

Для тех, кто использует файл .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>

Ответ 5

Если ни одно из вышеперечисленных решений не работает для вас (они не для меня), вот что работает на моем сервере:

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

Ответ 6

все вышеизложенное не работало, когда я использовал 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]

Ответ 7

Лучше избегать использования mod_rewrite, когда вы можете.

В вашем случае я бы заменил переписать на это:

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

Директива <If> доступна только в Apache 2. 4+ согласно этому блогу здесь.

Ответ 8

Ни один из ответов не работает для меня на веб-сайте Wordpress, но после работы (он похож на другие ответы, но немного меняется)

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

Ответ 9

это работает для меня.

<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.

Ответ 10

Насколько я знаю, простое обновление метаданных также работает без ошибок:

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