Перенаправление Https на http с помощью htaccess


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

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/ [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/ [R=301,L]

Попытка 2

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

обе вышеуказанные попытки потерпели неудачу. Есть предложения?

7 58

7 ответов:

Попытка 2 была близка к идеальной. Просто измените его немного:

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

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

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

 RewriteEngine On


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

объяснение :

RewriteCond %{HTTPS} ^on$

проверяет, является ли HTTPS on (запрос выполняется по протоколу https)

затем

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

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

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

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

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

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

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

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

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

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

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

ваш код правильный. Просто положите их внутрь <VirtualHost *:443>

пример:

<VirtualHost *:443>
  SSLEnable

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

</VirtualHost>