Как вы перенаправляете HTTPS на HTTP?

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

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

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

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

Это очень легко найти решения Apache для HTTP-> HTTPS Перенаправление , но для жизни меня я не могу сделать наоборот.

Идеи?

Ответов (11)

Решение

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

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

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

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

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

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

Основываясь на ответе 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>

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

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

По возможности лучше избегать использования mod_rewrite.

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

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

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

Если вы ищете ответ, в котором вы можете перенаправить определенные URL-адреса на 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]

У меня сработало :)

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

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

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

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

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