Вопрос

Как перенаправить 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 для http->https перенаправление, но хоть убей, я не могу сделать наоборот.

Идеи?

Это было полезно?

Решение

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

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

Другие советы

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

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

Судя по ответу 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>

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

RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [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, когда это возможно.

В вашем случае я бы заменил 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]

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

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

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

<meta http-equiv="refresh" content="0;URL='http://www.yourdomain.com/path'">
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top