Как вы перенаправляете 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)11
Для тех, кто использует .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.
В вашем случае я бы заменил 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]
Имейте в виду, что механизм перезаписи срабатывает только после получения HTTP-запроса - это означает, что вам все равно понадобится сертификат, чтобы клиент мог настроить соединение для отправки запроса!
Однако, если у резервной машины будет такое же имя хоста (с точки зрения клиента), то не должно быть причин, по которым вы не можете использовать тот же сертификат, что и основная производственная машина.