Как вы перенаправляете HTTPS в HTTP? - PullRequest
152 голосов
/ 12 августа 2008

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

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

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

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

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

Идеи

Ответы [ 10 ]

124 голосов
/ 12 августа 2008

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

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}
68 голосов
/ 12 августа 2008

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

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

10 голосов
/ 24 января 2013

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

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{ENV:HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
8 голосов
/ 01 декабря 2015

Для тех, кто использует .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>
6 голосов
/ 21 февраля 2013

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

RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L,R=301]
4 голосов
/ 08 марта 2017

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

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

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

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

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

0 голосов
/ 04 января 2019

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

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

0 голосов
/ 12 ноября 2017

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

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
0 голосов
/ 03 сентября 2012

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

<meta http-equiv="refresh" content="0;URL='http://www.yourdomain.com/path'">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...