Próbuję przekierować wszystkie niepewne żądania HTTP w mojej witrynie (np. http://www.example.com) Na HTTPS ( https://www.example.com). Używam PHP Btw. Czy mogę to zrobić w .htaccess?
Możesz (i powinieneś) to zrobić za pomocą swojego httpd, a nie PHP.
zanurzyć
2
@jnpcl, chociaż zgadzam się, że rozwiązanie httpd jest lepsze niż rozwiązanie oparte na PHP, nie sądzę, aby systematyczne przekierowywanie było ogólnie dobrą praktyką. Jeśli chcesz przekierowywać użytkowników do HTTPS przez cały czas, wyślij ich tam z „punktu wejścia” (pierwszego linku do Twojej witryny), nie rób tego w połowie, ponieważ może to spowodować wyciek niektórych danych, które Twoim zdaniem jest chroniony (jeśli nie zauważysz tego natychmiastowego przekierowania).
Bruno,
@Bruno: Myślałem bardziej o zduplikowanych żądaniach HTTP, potencjale zagubionych ciągów zapytań i możliwości ręcznego wpisywaniahttp://
drud
@ jnpcl to naprawdę dobra uwaga. Po prostu sugerowałem, że chociaż ludzie często proszą o takie przekierowanie w celu poprawy bezpieczeństwa swojej witryny, często tak naprawdę nie poprawia jej (ponieważ nie uniemożliwia to tego samego żądania przejścia przez zwykły HTTP) .
Bruno,
8
@outis: pierwszy opublikowany link to pytanie.
Mei
Odpowiedzi:
305
Aktualizacja: Chociaż ta odpowiedź została zaakceptowana kilka lat temu, należy pamiętać, że jej podejście jest obecnie zalecane w dokumentacji Apache. RedirectZamiast tego użyj . Zobacz tę odpowiedź .
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
@Cat, jak mówiłem w mojej odpowiedzi / komentarzach, jeśli próbujesz „przekierować wszystkie niepewne HTTP [...] na HTTPS”, to podejście nie zabezpieczy tych żądań, po prostu sprawi, że przeglądarka je wykona. dwa razy, raz niepewny i raz bezpieczny.
Bruno,
13
To, co powinieneś naprawdę robić, to używać HSTS w zgodzie z tym.
Reese Moore
3
Może to być błąd w mojej wersji apache (2.4.6 w pakiecie w Centos 7), ale mam pewne problemy z niektórymi adresami URL. Na przykład http://server/foo?email=someone%40example.comprzekierowanie do https://server/foo?email=someone%2540example.comznaku „@” jest dwukrotnie cytowane w adresie URL . Użycie metody z odpowiedzi @ ssc nie ma tego problemu.
psmears
2
Zła odpowiedź. Przekieruje tylko podstawowy adres URL, a nie adresy URL w podfolderach. RewriteRule (. *) Https: //% {HTTP_HOST}% {REQUEST_URI} [R = 301, L] to poprawna odpowiedź
FredTheWebGuy
7
Niekoniecznie In the case of the http-to-https redirection, the use of RewriteRule would be appropriate if you don't have access to the main server configuration file, and are obliged to perform this task in a .htaccess file instead.
To powinna być aktualna odpowiedź. Ale co dokładnie dzieje się w „konfiguracji SSL”? Pełny przykład byłby naprawdę pomocny.
Ben
6
@Ben: to inne pytanie, które jest szeroko udokumentowane online; nawiasem mówiąc, właśnie dodałem wczoraj prawie pełny przykład: serverfault.com/q/597012/26210, który może dać ci wyobrażenie o tym, co dzieje się w konfiguracji SSL
ssc
46
To świetna wskazówka. Ale w dokumencie Apache wspomina również: „W przypadku przekierowania http-na-https użycie RewriteRule byłoby odpowiednie, jeśli nie masz dostępu do głównego pliku konfiguracyjnego serwera i jesteś zobowiązany do wykonania tego zadania w zamiast tego plik .htaccess. ” Tak jest w moim przypadku ...
peter_the_oak
4
@ user1844933 Jeśli używasz permanentsłowa kluczowego, efekt jest taki sam (przeglądarka otrzymuje przekierowanie 301). Np .:Redirect permanent "/" "https://example.com"
BeetleJuice
2
@Whitecat W Centos 6 plik znajduje się na /etc/httpd/conf/httpd.conf
dstonek
141
Polecam z przekierowaniem 301:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
dzięki, to działa dla mnie, zaakceptowana odpowiedź nie .. prawdopodobnie z powodu braku[L]
billynoah
1
Tak. To poprawna odpowiedź, ponieważ kieruje również wszystkie adresy URL w podfolderach
FredTheWebGuy,
Czy to jest na najwyższym poziomie pliku htaccess?
CodyBugstein
1
@CodyBugstein Tam zawsze go umieszczam i zawsze działa.
Daan van den Bergh
3
We wszystkich odpowiedziach brakuje jednej rzeczy - każdy kod przekierowania musi być umieszczony na początku pliku .htaccess, PRZED czymkolwiek innym, jeśli chcesz, aby wszystkie strony były przekierowane na https.
Vadim Anisimov
35
Jak mówiłem w tym pytaniu , sugeruję unikanie przekierowywania wszystkich żądań HTTP do ich ekwiwalentu HTTPS na ślepo, ponieważ może to spowodować fałszywe wrażenie bezpieczeństwa. Zamiast tego należy prawdopodobnie przekierować „katalog główny” witryny HTTP do katalogu głównego witryny HTTPS i stamtąd link, tylko do HTTPS.
Problem polega na tym, że jeśli jakiś link lub formularz w witrynie HTTPS zmusza klienta do wysłania żądania do witryny HTTP, jego zawartość będzie widoczna przed przekierowaniem.
Na przykład, jeśli jedna z twoich stron obsługiwanych przez HTTPS ma formularz, który mówi <form action="http://example.com/doSomething">i wysyła niektóre dane, które nie powinny być wysyłane w wyraźny sposób, przeglądarka najpierw wyśle pełne żądanie (w tym encję, jeśli jest to POST) do strony HTTP pierwszy. Przekierowanie zostanie natychmiast wysłane do przeglądarki, a ponieważ duża liczba użytkowników wyłącza lub ignoruje ostrzeżenia, prawdopodobnie zostanie zignorowana.
Oczywiście błąd w podawaniu linków, które powinny być do strony HTTPS, ale w końcu dla strony HTTP, może powodować problemy, gdy tylko coś nasłuchuje na porcie HTTP na tym samym adresie IP, co strona HTTPS. Uważam jednak, że zachowanie tych dwóch witryn jako „kopii lustrzanej” zwiększa jedynie prawdopodobieństwo popełnienia błędów, ponieważ możesz mieć skłonność do zakładania, że sam się poprawi, przekierowując użytkownika do HTTPS, podczas gdy często jest już za późno. (W tym pytaniu były podobne dyskusje ).
Podejmując decyzję o obsłudze całej witryny jako HTTPS, tego rodzaju przekierowanie ma sens. Nie chcę, aby użytkownik otrzymał 403, ponieważ podał http dla swojej strony docelowej. Zgadzam się, jeśli ktoś NIE określi http w linku i wdroży go do produkcji, która jest ZŁA. NALEŻY go złapać podczas testowania, nawet przy przekierowaniu na miejscu. Nie podoba mi się argument „mógł”, ponieważ to „mogło” nastąpić bez przekierowania. Objawy są takie same podczas testowania w bezpiecznej przeglądarki, z wyjątkiem po potwierdzeniu wysłać w klarowny przekierowuje zamiast odbierania 403.
Derek Litz
Tak, widzę korzyść polegającą na ciężkim niepowodzeniu, jeśli ktoś omyłkowo wstawi http do akcji formularza, ale w większości przypadków ważniejsze jest bycie łagodnym przy wpisywaniu adresów URL.
Daniel Lubarov
4
@Daniel, zgadzam się, że warto być pobłażliwym, gdy użytkownicy wpisują adres URL. Powiedziałbym, że jest to jeden z przypadków, w których lepiej jest wyłączyć tę funkcję podczas programowania / testowania, ale włączyć ją podczas produkcji (lub na ostatnich etapach programowania / testowania).
Bruno
dlaczego nie zrobić http do https w dns.
Muhammad Umer
1
@MuhammadUmer, ponieważ nie ma to nic wspólnego z DNS. Używaliby ogólnie tej samej nazwy hosta, ale nawet z inną nazwą hosta nadal trzeba zmienić protokół i port.
Bruno,
18
Dowiedziałem się, że najlepszym sposobem na https i www w domenie jest
To nie przekieruje, http://www.example.com/...ponieważ dwa warunki są domyślnie ORAZ. Zamiast tego powinny być OR, tzn. dołącz ORflagę na pierwszym warunku (i pamiętaj, aby uciec od literalnych kropek w wyrażeniu regularnym). Ale jeśli wdrażają TGV następnie nie chcesz przekierować do HTTPS i www w jednym przekierowania, należy przekierować do HTTPS pierwszy .
Jest to właściwa metoda przekierowywania HTTP na HTTPS przy użyciu .htaccess zgodnie z GoDaddy.com. Pierwszy wiersz kodu jest oczywisty. Drugi wiersz kodu sprawdza, czy HTTPS jest wyłączony, a jeśli tak, to przekierowuje HTTP do HTTPS, uruchamiając trzeci wiersz kodu, w przeciwnym razie trzeci wiersz kodu jest ignorowany.
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Ale zapytałeś też, czy możesz to zrobić w .htaccesspliku. W takim przypadku możesz użyć RewriteEngine Apache :
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L]
Jeśli wszystko działa poprawnie i chcesz, aby przeglądarki zapamiętały to przekierowanie, możesz zadeklarować je jako stałe, zmieniając ostatni wiersz na:
Ale bądź ostrożny, jeśli możesz zmienić zdanie na temat tego przekierowania. Przeglądarki zapamiętują to bardzo długo i nie sprawdzą, czy to się zmieniło.
Pierwsza linia może nie być potrzebna RewriteEngine On zależności od konfiguracji serwera WWW.
Wygląda na to, że dokumentacja Apache odradza trasę Rewrite. Co z przekierowaniem? Co jeszcze może iść w .htaccesspliku?
Aaron Franke
Tak, przekierowanie jest preferowane i może być używane w .htaccess. Nie można jednak dodać warunku, aby przekierowywać ruch HTTP tylko do https. Przekierowuje również https -> nieskończoną pętlę przekierowań. Wymieniłem go w dyrektywie VirtualHost używanej dla http (port 80) powyżej, .htaccess nie obsługuje tej dyrektywy i dlatego nie można tutaj użyć przekierowania.
Wykonaj wszystko, co wyjaśniono powyżej w celu przekierowania. Wystarczy dodać „HTTP Strict Transport Security” do nagłówka. Pozwoli to uniknąć ataku człowieka w środku.
Zmodyfikuj plik konfiguracyjny Apache (/etc/apache2/sites-enabled/website.conf i /etc/apache2/httpd.conf) i dodaj następujące elementy do VirtualHost:
# Optionally load the headers module:
LoadModule headers_module modules/mod_headers.so
<VirtualHost 67.89.123.45:443>
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
</VirtualHost>
Jeśli znajdujesz się w sytuacji, w której nie możesz uzyskać dostępu do konfiguracji apache bezpośrednio dla swojej witryny, na której wiele hostowanych platform jest nadal ograniczonych w ten sposób, to właściwie zaleciłbym podejście dwuetapowe. Powód, dla którego Apache sam dokumentuje, że powinieneś użyć ich opcji konfiguracji przede wszystkim w mod_rewrite dla HTTP na HTTPS.
Po pierwsze, jak wspomniano powyżej, skonfigurujesz reguły .htaccess mod_rewrite:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Następnie w pliku (plikach) PHP (musisz to zrobić tam, gdzie byłoby to właściwe dla Twojej sytuacji, niektóre strony będą obsługiwać wszystkie żądania za pomocą jednego pliku PHP, inne obsługują różne strony w zależności od ich potrzeb i złożonego żądania) ):
<?php if ($_SERVER['HTTPS'] != 'on') { exit(1); } ?>
Powyższe należy uruchomić PRZED jakimkolwiek kodem, który mógłby potencjalnie ujawnić bezpieczne dane w niezabezpieczonym środowisku. W ten sposób Twoja strona korzysta z automatycznego przekierowania przez HTACCESS i mod_rewrite, podczas gdy twoje skrypty zapewniają, że dane wyjściowe nie są dostarczane, gdy nie są dostępne przez HTTPS.
Myślę, że większość ludzi tak nie myśli, dlatego Apache zaleca, aby nie używać tej metody tam, gdzie to możliwe. Jednak po prostu wymaga dodatkowej kontroli po stronie programistycznej, aby zapewnić bezpieczeństwo danych użytkownika. Mamy nadzieję, że pomoże to komuś innemu, kto może być zmuszony do skorzystania z niezalecanych metod z powodu ograniczeń na naszych usługach hostingowych.
Jeśli chcesz to zrobić z serwera tomcat, wykonaj poniższe czynności
W samodzielnym serwerze HTTP Apache Tomcat (8.5.x), w jaki sposób można go skonfigurować, aby jeśli użytkownik wpisze www.domain.com, zostanie automatycznie przekierowany na stronę https (www.domain.com).
2-etapowa metoda włączenia następujących elementów do [Tomcat_base] /conf/web.xml przed tagiem zamykającym
Inną zaletą tego problemu jest sytuacja, gdy w grę wchodzi moduł równoważenia obciążenia.
Sytuacja wygląda następująco: - Ruch z przeglądarki do modułu równoważenia obciążenia iz powrotem to (powinno być) HTTPS - Ruch między modułem równoważenia obciążenia a rzeczywistym serwerem WWW to HTTP.
Zatem wszystkie zmienne żądań serwera w PHP lub Apache pokazują, że połączenie jest po prostu HTTP. A katalogi HTTP i HTTPS na serwerze są takie same.
Warunek Rewrite w zatwierdzonej odpowiedzi nie działa. Daje pętlę lub po prostu nie działa.
Pytanie brzmi: jak to zrobić w module równoważenia obciążenia.
(Lub jest źle skonfigurowany moduł równoważenia obciążenia. Mam na to nadzieję, ponieważ wtedy mogę przenieść problem do firmy WebHosting :-))
Zamiast tego przekierowanie musiałoby się odbyć na module równoważenia obciążenia. W zależności od typu modułu równoważenia obciążenia powinno to być możliwe w konfiguracji lub w samej instancji apache, w której działałaby zaakceptowana odpowiedź. Po prostu nie rób tego na pojedynczych węzłach.
i na przykład http: // server / foo? email = ktoś% 40example.com przekierowuje normalnie bez żadnych problemów. Plik .htaccess znajduje się w folderze głównym witryny (na przykład o nazwie public_html). Możliwe jest użycie
RewriteCond% {SERVER_PORT}! ^ 443 $ zamiast RewriteCond% {HTTPS}! Na
httpd
, a nie PHP.http://
Odpowiedzi:
Aktualizacja: Chociaż ta odpowiedź została zaakceptowana kilka lat temu, należy pamiętać, że jej podejście jest obecnie zalecane w dokumentacji Apache.
Redirect
Zamiast tego użyj . Zobacz tę odpowiedź .źródło
http://server/foo?email=someone%40example.com
przekierowanie dohttps://server/foo?email=someone%2540example.com
znaku „@” jest dwukrotnie cytowane w adresie URL . Użycie metody z odpowiedzi @ ssc nie ma tego problemu.In the case of the http-to-https redirection, the use of RewriteRule would be appropriate if you don't have access to the main server configuration file, and are obliged to perform this task in a .htaccess file instead.
Dokumenty Apache odradzają używanie przepisywania:
Ten fragment kodu powinien przejść do pliku konfiguracji głównego serwera, a nie do pliku
.htaccess
zadanego w pytaniu.Ten artykuł mógł pojawić się dopiero po zadaniu pytania i udzieleniu odpowiedzi, ale wydaje się, że jest to aktualna droga.
źródło
permanent
słowa kluczowego, efekt jest taki sam (przeglądarka otrzymuje przekierowanie 301). Np .:Redirect permanent "/" "https://example.com"
Polecam z przekierowaniem 301:
źródło
[L]
Jak mówiłem w tym pytaniu , sugeruję unikanie przekierowywania wszystkich żądań HTTP do ich ekwiwalentu HTTPS na ślepo, ponieważ może to spowodować fałszywe wrażenie bezpieczeństwa. Zamiast tego należy prawdopodobnie przekierować „katalog główny” witryny HTTP do katalogu głównego witryny HTTPS i stamtąd link, tylko do HTTPS.
Problem polega na tym, że jeśli jakiś link lub formularz w witrynie HTTPS zmusza klienta do wysłania żądania do witryny HTTP, jego zawartość będzie widoczna przed przekierowaniem.
Na przykład, jeśli jedna z twoich stron obsługiwanych przez HTTPS ma formularz, który mówi
<form action="http://example.com/doSomething">
i wysyła niektóre dane, które nie powinny być wysyłane w wyraźny sposób, przeglądarka najpierw wyśle pełne żądanie (w tym encję, jeśli jest to POST) do strony HTTP pierwszy. Przekierowanie zostanie natychmiast wysłane do przeglądarki, a ponieważ duża liczba użytkowników wyłącza lub ignoruje ostrzeżenia, prawdopodobnie zostanie zignorowana.Oczywiście błąd w podawaniu linków, które powinny być do strony HTTPS, ale w końcu dla strony HTTP, może powodować problemy, gdy tylko coś nasłuchuje na porcie HTTP na tym samym adresie IP, co strona HTTPS. Uważam jednak, że zachowanie tych dwóch witryn jako „kopii lustrzanej” zwiększa jedynie prawdopodobieństwo popełnienia błędów, ponieważ możesz mieć skłonność do zakładania, że sam się poprawi, przekierowując użytkownika do HTTPS, podczas gdy często jest już za późno. (W tym pytaniu były podobne dyskusje ).
źródło
Dowiedziałem się, że najlepszym sposobem na https i www w domenie jest
źródło
http://www.example.com/...
ponieważ dwa warunki są domyślnie ORAZ. Zamiast tego powinny być OR, tzn. dołączOR
flagę na pierwszym warunku (i pamiętaj, aby uciec od literalnych kropek w wyrażeniu regularnym). Ale jeśli wdrażają TGV następnie nie chcesz przekierować do HTTPS i www w jednym przekierowania, należy przekierować do HTTPS pierwszy .Jest to metoda przekierowania HTML, która działa, ale nie jest najlepsza.
Podejście PHP
.htaccess approch
skopiowane z: www.letuslook.org
źródło
.htaccess
idzie Ponadto ten link jest martwy.Podoba mi się ta metoda przekierowywania z http na https. Ponieważ nie muszę go edytować dla każdej witryny.
źródło
Użycie następującego kodu w pliku .htaccess automatycznie przekierowuje odwiedzających do wersji HTTPS witryny:
Jeśli masz istniejący plik .htaccess:
Nie powielaj RewriteEngine On.
Upewnij się, że wiersze rozpoczynające się od RewriteCond i RewriteRule natychmiast następują po już istniejącym RewriteEngine.
źródło
Jest to właściwa metoda przekierowywania HTTP na HTTPS przy użyciu .htaccess zgodnie z GoDaddy.com. Pierwszy wiersz kodu jest oczywisty. Drugi wiersz kodu sprawdza, czy HTTPS jest wyłączony, a jeśli tak, to przekierowuje HTTP do HTTPS, uruchamiając trzeci wiersz kodu, w przeciwnym razie trzeci wiersz kodu jest ignorowany.
https://www.godaddy.com/help/redirect-http-to-https-automatically-8828
źródło
Najlepsze rozwiązanie zależy od twoich wymagań. To jest podsumowanie wcześniej opublikowanych odpowiedzi z dodanym kontekstem.
Jeśli pracujesz z serwerem WWW Apache i możesz zmienić jego konfigurację, postępuj zgodnie z dokumentacją Apache :
Ale zapytałeś też, czy możesz to zrobić w
.htaccess
pliku. W takim przypadku możesz użyć RewriteEngine Apache :Jeśli wszystko działa poprawnie i chcesz, aby przeglądarki zapamiętały to przekierowanie, możesz zadeklarować je jako stałe, zmieniając ostatni wiersz na:
Ale bądź ostrożny, jeśli możesz zmienić zdanie na temat tego przekierowania. Przeglądarki zapamiętują to bardzo długo i nie sprawdzą, czy to się zmieniło.
Pierwsza linia może nie być potrzebna
RewriteEngine On
zależności od konfiguracji serwera WWW.Jeśli szukasz rozwiązania PHP, spójrz na tablicę $ _SERVER i funkcję nagłówka :
źródło
.htaccess
pliku?Dodaj następujący kod do pliku .htaccess:
Gdzie [twoja nazwa domeny] to nazwa domeny Twojej witryny.
Możesz także przekierować określone foldery z nazwy domeny, zastępując ostatni wiersz powyższego kodu:
źródło
Wykonaj wszystko, co wyjaśniono powyżej w celu przekierowania. Wystarczy dodać „HTTP Strict Transport Security” do nagłówka. Pozwoli to uniknąć ataku człowieka w środku.
https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security
źródło
Aby przekierować wszystkie
http
żądaniahttps
, możesz użyć:Jeśli mod-rewrite nie jest włączony i korzystasz z Apache 2.4, możesz również użyć
Redirect
wewnętrznejif
dyrektywy do przekierowaniahttp
żądańhttps
.Apache 2.4.
źródło
Jeśli znajdujesz się w sytuacji, w której nie możesz uzyskać dostępu do konfiguracji apache bezpośrednio dla swojej witryny, na której wiele hostowanych platform jest nadal ograniczonych w ten sposób, to właściwie zaleciłbym podejście dwuetapowe. Powód, dla którego Apache sam dokumentuje, że powinieneś użyć ich opcji konfiguracji przede wszystkim w mod_rewrite dla HTTP na HTTPS.
Po pierwsze, jak wspomniano powyżej, skonfigurujesz reguły .htaccess mod_rewrite:
Następnie w pliku (plikach) PHP (musisz to zrobić tam, gdzie byłoby to właściwe dla Twojej sytuacji, niektóre strony będą obsługiwać wszystkie żądania za pomocą jednego pliku PHP, inne obsługują różne strony w zależności od ich potrzeb i złożonego żądania) ):
Powyższe należy uruchomić PRZED jakimkolwiek kodem, który mógłby potencjalnie ujawnić bezpieczne dane w niezabezpieczonym środowisku. W ten sposób Twoja strona korzysta z automatycznego przekierowania przez HTACCESS i mod_rewrite, podczas gdy twoje skrypty zapewniają, że dane wyjściowe nie są dostarczane, gdy nie są dostępne przez HTTPS.
Myślę, że większość ludzi tak nie myśli, dlatego Apache zaleca, aby nie używać tej metody tam, gdzie to możliwe. Jednak po prostu wymaga dodatkowej kontroli po stronie programistycznej, aby zapewnić bezpieczeństwo danych użytkownika. Mamy nadzieję, że pomoże to komuś innemu, kto może być zmuszony do skorzystania z niezalecanych metod z powodu ograniczeń na naszych usługach hostingowych.
źródło
Poprzez .htaccess Pomoże to.
Zobacz też, aby uzyskać więcej szczegółów. Jak przekierować HTTP na HTTP?
źródło
O ile nie potrzebujesz mod_rewrite do innych rzeczy, użycie dyrektywy IF Apache core jest czystsze i szybsze:
Możesz dodać więcej warunków do dyrektywy IF, na przykład zapewnić jedną domenę kanoniczną bez prefiksu www:
Używanie mod_rewrite do wszystkiego jest bardzo obojętne, ale sprawdź, czy to zadziała.
Więcej informacji: https://httpd.apache.org/docs/2.4/mod/core.html#if
Aby zobaczyć to w akcji (spróbuj bez www. Lub https: // lub z .net zamiast .com): https://nohodental.com/ (strona, nad którą pracuję).
źródło
przekaż ten kod do pliku .htaccess Automatycznie przekieruj HTTP na HTTPS
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
źródło
Znalazłem metodę wymuszenia przekierowania wszystkich stron mojej witryny z http na analogiczne strony w https, które działają dla mnie.
źródło
(działało dla mnie, gdy żadna z powyższych odpowiedzi nie działała)
Premia:
(naprawiono https: // www .example.com nie znaleziono)
źródło
To przekierowuje wszystkie adresy URL na https i www
źródło
Jeśli chcesz to zrobić z serwera tomcat, wykonaj poniższe czynności
W samodzielnym serwerze HTTP Apache Tomcat (8.5.x), w jaki sposób można go skonfigurować, aby jeśli użytkownik wpisze www.domain.com, zostanie automatycznie przekierowany na stronę https (www.domain.com).
2-etapowa metoda włączenia następujących elementów do [Tomcat_base] /conf/web.xml przed tagiem zamykającym
i ustawienie ustawień konektora [Tomcat_base] /conf/server.xml:
Uwaga: Jeśli już wykonałeś konfigurację https i próbujesz przekierować, wykonaj tylko krok 1.
źródło
Jeśli używasz Apache, mod_rewrite jest najłatwiejszym rozwiązaniem i ma mnóstwo dokumentacji online, jak to zrobić. Na przykład: http://www.askapache.com/htaccess/http-https-rewriterule-redirect.html
źródło
Inną zaletą tego problemu jest sytuacja, gdy w grę wchodzi moduł równoważenia obciążenia.
Sytuacja wygląda następująco: - Ruch z przeglądarki do modułu równoważenia obciążenia iz powrotem to (powinno być) HTTPS - Ruch między modułem równoważenia obciążenia a rzeczywistym serwerem WWW to HTTP.
Zatem wszystkie zmienne żądań serwera w PHP lub Apache pokazują, że połączenie jest po prostu HTTP. A katalogi HTTP i HTTPS na serwerze są takie same.
Warunek Rewrite w zatwierdzonej odpowiedzi nie działa. Daje pętlę lub po prostu nie działa.
Pytanie brzmi: jak to zrobić w module równoważenia obciążenia.
(Lub jest źle skonfigurowany moduł równoważenia obciążenia. Mam na to nadzieję, ponieważ wtedy mogę przenieść problem do firmy WebHosting :-))
źródło
Jeśli korzystasz z usługi elastycznego równoważenia obciążenia Amazon Web Services, która akceptuje ruch https i kieruje go na serwer (y) za pomocą protokołu http, poprawny sposób przekierowywania całego ruchu HTTP na https opisano tutaj: https://aws.amazon. com / premiumsupport / Knowledge-center / redirect-http-https-elb
Użyj nagłówka X-Forwarded-Proto (zawiera http lub https), który jest zawsze zawarty w żądaniach http z modułu równoważenia obciążenia, jak opisano tutaj: https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/x- forwarded-headers.html
W pliku httpd.conf:
Lub w głównym pliku .htaccess:
Bonus: nie będzie próbował przekierować ruchu http na lokalnym komputerze deweloperskim.
źródło
Mi to pasuje:
i na przykład http: // server / foo? email = ktoś% 40example.com przekierowuje normalnie bez żadnych problemów. Plik .htaccess znajduje się w folderze głównym witryny (na przykład o nazwie public_html). Możliwe jest użycie RewriteCond% {SERVER_PORT}! ^ 443 $ zamiast RewriteCond% {HTTPS}! Na
źródło