Przekierowanie Https do http przy użyciu htaccess

Próbuję przekierować https://www.example.com do http://www.example.com . wypróbowałem następujący kod wplik htaccess

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

Ten kod pomyślnie przekierowuje https://example.com do http://www.example.com . jednak gdy wpiszę https://www.example.com potem pojawia się błąd "strona niedostępna" w przeglądarce.

Wypróbowałem również następujące 2 kody bez powodzenia

Próba 1

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

Próba 2

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}
Obie powyższe próby zakończyły się niepowodzeniem. Jakieś sugestie?
Author: BiscuitBaker, 2012-10-21

7 answers

Próba druga była bliska perfekcji. Po prostu zmodyfikuj go lekko:

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
 91
Author: arkascha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-14 18:42:37

Jeśli jednak Twoja witryna nie ma certyfikatu bezpieczeństwa, znajduje się w środowisku hostingu współdzielonego i nie chcesz otrzymywać "ostrzeżenia", gdy witryna jest żądana przez https, nie możesz przekierować jej za pomocą htaccess. Powodem jest to, że komunikat ostrzegawczy zostanie uruchomiony, zanim żądanie przejdzie do pliku htaccess, więc musisz to naprawić na serwerze. Przejdź do /etc/httpd / conf.d / ssl.conf i skomentuj część o serwerze wirtualnym 443. Ale szanse są takie, że Twój dostawca hostingu nie da ci takiej kontroli. Musisz więc przenieść się na inny host lub kupić SSL, aby ostrzeżenie nie wyzwalało się, zanim twój htaccess będzie miał szansę przekierować.

 27
Author: Adela Ruffatti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-29 17:45:50

Możesz użyć następującej reguły, aby przekierować z https do http:

 RewriteEngine On


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

Wyjaśnienie:

RewriteCond %{HTTPS} ^on$

Sprawdza, czy HTTPS jest na (żądanie jest wykonywane przy użyciu https)

Then

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

Redirect any request (https://example.com/foo ) to http://example.com/foo .

  • $1 jest częścią regex we wzorze RewriteRule, zawiera dowolną wartość przechwyconą w (.+) , w w tym przypadku rejestruje pełne request_uri wszystko po nazwie domeny.

  • [NC,L, R] są flagami, NC sprawia, że wielkość liter uri jest sensowna, możesz użyć zarówno wielkich, jak i małych liter w żądaniu.

Flaga L mówi serwerowi, aby przestał przetwarzać inne reguły, jeśli reguła currunt jest zgodna, ważne jest, aby użyć flagi L, aby uniknąć konfliktu reguł, gdy masz więcej niż na regułach w bloku.

Flaga R służy do tworzenia zewnętrznego przekierowanie.

 8
Author: starkeen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-14 19:05:21
RewriteEngine On
RewriteCond %{SERVER_PORT} 443
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
 7
Author: Auero,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-14 19:04:40

Różnica między http i https polega na tym, że żądania https są wysyłane przez połączenie szyfrowane ssl. Połączenie szyfrowane ssl musi zostać nawiązane między przeglądarką a serwerem, zanim przeglądarka wyśle żądanie http.

Żądania Https są w rzeczywistości żądaniami http, które są wysyłane przez szyfrowane połączenie ssl. Jeśli serwer odmówi nawiązania szyfrowanego połączenia ssl, przeglądarka nie będzie miała połączenia, aby wysłać żądanie. Przeglądarka i serwer nie będą mogli ze sobą rozmawiać. Przeglądarka nie będzie w stanie wysłać adresu url, do którego chce uzyskać dostęp, a serwer nie będzie w stanie odpowiedzieć przekierowaniem na inny adres url.

Więc nie jest to możliwe. Jeśli chcesz odpowiadać na łącza https, potrzebujesz certyfikatu ssl.

 1
Author: drhema,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-23 07:10:30
RewriteCond %{HTTP:X-Forwarded-Proto} =https
 1
Author: Eric Michalsen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-06 13:43:01

Twój kod jest poprawny. Wystarczy umieścić je wewnątrz <VirtualHost *:443>

Przykład:

<VirtualHost *:443>
  SSLEnable

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

</VirtualHost>
 0
Author: Hiro Itasiki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-18 12:11:59