Как вы перенаправляете HTTPS в HTTP? То есть противоположность тому, что (кажется) каждый учит.
У меня есть сервер на HTTPS, за который я заплатил сертификацию SSL, и зеркало, для которого я не имею, и храню его только для экстренных случаев, поэтому оно не заслуживает получения сертификата.
На рабочих столах моего клиента у меня есть НЕКОТОРЫЕ ярлыки, которые указывают на http://production_server
и https://production_server
(оба работают). Однако я знаю, что если мой https://mirror_server
рабочий сервер выйдет из строя , то переадресация DNS включится, и те клиенты, у которых есть ярлык «https», будут смотреть (что не работает) и большой толстый красный экран Internet Explorer 7, вызывающий беспокойство для моей компании.
К сожалению, я не могу просто переключить это на уровне клиента. Эти пользователи очень неграмотны на компьютере: и очень вероятно, что увидят ошибки «небезопасности» HTTPS (особенно то, как Firefox 3 и Internet Explorer 7 в настоящее время обрабатывают это: полная остановка, к счастью, но не помогает мне здесь, LOL).
Это очень легко найти решения Apache для HTTP-> HTTPS Перенаправление , но для жизни меня я не могу сделать наоборот.
Идеи?
Это не было проверено, но я думаю, что это должно работать с использованием mod_rewrite
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}
Имейте в виду, что механизм перезаписи включается только после получения HTTP-запроса - это означает, что вам все равно понадобится сертификат, чтобы клиент мог установить соединение для отправки запроса!
Однако если машина резервного копирования будет иметь такое же имя хоста (что касается клиента), то не должно быть никаких причин, по которым вы не можете использовать тот же сертификат, что и на главном рабочем компьютере.
Насколько я знаю, простое мета-обновление также работает без ошибок:
<meta http-equiv="refresh" content="0;URL='http://www.yourdomain.com/path'">
Исходя из ответа ejunker, это решение работает для меня не на одном сервере, а в облачной среде
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{ENV:HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Если ни одно из вышеуказанных решений не работает для вас (они не для меня), вот что сработало на моем сервере:
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L,R=301]
L,
(что означает «Последнее правило»). Если вы используете WordPress или другую CMS, L
флаг может помешать правильной маршрутизации запроса страницы. Вместо этого используйте:RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301]
Для тех, кто использует .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>
Лучше избегать использования mod_rewrite, когда вы можете.
В вашем случае я бы заменил переписать на это:
<If "%{HTTPS} == 'on'" >
Redirect permanent / http://production_server/
</If>
<If>
Директива доступна только в Apache 2.4+ , как в этом блоге здесь .
/usr/sbin/httpd -v
все вышеперечисленное не работало, когда я использовал 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]
Ни один из ответов не работает для меня на веб-сайте 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.