Подтвердить что ты не робот

Https to http redirect с использованием htaccess

Я пытаюсь перенаправить https://www.example.com на http://www.example.com. Я пробовал следующий код в файле .htaccess

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

Этот код успешно перенаправляет https://example.com на http://www.example.com. Однако, когда я печатаю https://www.example.com, он дает мне ошибку "веб-страницы недоступно" в браузере.

Я также пробовал следующие 2 кода без успеха

Попытка 1

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/(.*):NOSSL$ http://www.example.com/$1 [R=301,L]

Попытка 2

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

Обе попытки были неудачными. Любые предложения?

4b9b3361

Ответ 1

Попытка 2 была близка к совершенству. Просто слегка измените его:

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

Ответ 2

Однако, если ваш веб-сайт не имеет сертификата безопасности, он находится в общей среде размещения, и вы не хотите получать "предупреждение", когда ваш сайт запрашивается через https, вы не можете перенаправить его, используя Htaccess. Причина в том, что предупреждающее сообщение запускается до того, как запрос даже переходит в файл htaccess, поэтому вам нужно исправить его на сервере. Перейдите в /etc/httpd/conf.d/ssl.conf и закомментируйте часть о виртуальном сервере 443. Но вероятность того, что ваш хостинг-провайдер не даст вам такого контроля. Таким образом, вам придется либо перейти на другой хост, либо купить SSL, чтобы предупреждение не запускалось до того, как ваш htaccess имеет возможность перенаправлять.

Ответ 3

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

Ответ 4

Вы можете использовать следующее правило для перенаправления с https на http:

 RewriteEngine On


RewriteCond %{HTTPS} ^on$
RewriteRule ^(.*)$ http://example.com/$1 [NC,L,R]

Объяснение:

RewriteCond %{HTTPS} ^on$

Проверяет, является ли HTTPS на (запрос выполняется с использованием https)

Тогда

RewriteRule ^(.*)$ http://example.com/$1 [NC,L,R]

Перенаправить любой запрос (https://example.com/foo) до http://example.com/foo.

  • $1 является частью регулярного выражения в шаблоне RewriteRule, он содержит любое значение, которое было зафиксировано в (. +), в этом случае оно захватывает полное request_uri все после имени домена.

  • [NC, L, R] являются флагами, NC делает сенсибилизацию uri, вы можете использовать в запросе как прописные, так и строчные буквы.

Флаг

L указывает серверу прекратить выполнение других правил, если правило currunt совпало, важно использовать флаг L, чтобы избежать конфликтов правил, когда у вас больше правил на блоке.

Флаг

R используется для выполнения внешнего перенаправления.

Ответ 5

Разница между http и https заключается в том, что запросы https отправляются через соединение с ssl-encrypted. Зашифрованное соединение ssl должно устанавливаться между браузером и сервером до того, как браузер отправит HTTP-запрос.

Запросы Https на самом деле являются http-запросами, которые отправляются через зашифрованное соединение ssl. Если сервер отказывается устанавливать шифрованное соединение ssl, браузер не будет иметь связи для отправки запроса. Браузер и сервер не смогут разговаривать друг с другом. Браузер не сможет отправить URL-адрес, к которому он хочет получить доступ, и сервер не сможет ответить перенаправлением на другой URL-адрес.

Так что это невозможно. Если вы хотите отвечать на https-ссылки, вам нужен сертификат ssl.

Ответ 6

RewriteCond %{HTTP:X-Forwarded-Proto} =https

Ответ 7

Ваш код верен. Просто поместите их в <VirtualHost *:443>

Пример:

<VirtualHost *:443>
  SSLEnable

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

</VirtualHost>