htaccess redirect to https://www
Mam następujący kod htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond !{HTTPS} off
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
Chcę, aby moja strona została przekierowana do https://www.
za pomocą HTTPS i wymuszona subdomena www.
,
ale kiedy uzyskuję dostęp do http://www.
(bez HTTPS), nie przekierowuje mnie to do https://www
z HTTPS.
12 answers
Aby wymusić HTTPS, musisz sprawdzić poprawną zmienną środowiskową %{HTTPS} off
, ale powyższa reguła poprzedza www.
ponieważ masz drugą regułę do wymuszenia www.
, nie używaj jej w pierwszej regule.
RewriteEngine On
RewriteCond %{HTTPS} off
# First rewrite to HTTPS:
# Don't put www. here. If it is already there it will be included, if not
# the subsequent rule will catch it.
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Now, rewrite any request to the wrong domain to use www.
# [NC] is a case-insensitive match
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
O proxyowaniu
Gdy za niektórymi formami proxyingu, w którym klient łączy się przez HTTPS z proxy, load balancer, aplikacją pasażerską itp., zmienna %{HTTPS}
może nigdy nie być on
i spowodować pętlę przepisywania. Dzieje się tak dlatego, że Twoja aplikacja jest odbieranie zwykłego ruchu HTTP, nawet jeśli klient i serwer proxy/load balancer używają HTTPS. W takich przypadkach należy sprawdzić nagłówek X-Forwarded-Proto
zamiast zmiennej %{HTTPS}
. Ta odpowiedź pokazuje odpowiedni proces
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
2018-04-02 20:32:38
ODPOWIEDŹ Michala zadziałała dla mnie, choć z jedną małą modyfikacją:
Problem:
Kiedy masz certyfikat bezpieczeństwa pojedynczego obiektu, przeglądarka, która próbuje uzyskać dostęp do strony bez https: / / www. (lub która domena obejmuje Twój certyfikat) wyświetli brzydki czerwony ekran ostrzegawczy przed nawet otrzyma przekierowanie do bezpiecznej i poprawnej strony https.
Rozwiązanie
Najpierw użyj przekierowania do www (lub która z domen jest objęta Twoim certyfikatem) i dopiero wtedy wykonaj przekierowanie https. Zapewni to, że użytkownicy nie zostaną skonfrontowani z żadnym błędem, ponieważ przeglądarka widzi certyfikat, który nie obejmuje bieżącego adresu url.
#First rewrite any request to the wrong domain to use the correct one (here www.)
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
#Now, rewrite to HTTPS:
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
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-03-18 10:36:05
Jeśli używasz CloudFlare lub podobnego CDN, otrzymasz błąd nieskończonej pętli z dostarczonymi tutaj rozwiązaniami %{HTTPS}. Jeśli jesteś użytkownikiem CloudFlare, musisz użyć tego:
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
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-11-13 23:30:44
ZŁE ROZWIĄZANIE I DLACZEGO!
Kiedy używasz zaakceptowanego kodu odpowiedzi:
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .* https://www.example.com%{REQUEST_URI} [L,R=301]
Przeglądarka idzie do:
http://example.com
Następnie przekierowuje na:
https://example.com
Następnie przekierowuje na:
https://www.example.com
To za dużo Prośba do serwera
NAJLEPSZE ROZWIĄZANIE I ODPOWIEDŹ
Ten kod ma [OR]
warunek, aby zapobiec podwójnym zmianom w url!
RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule (.*) https://www.example.com%{REQUEST_URI} [R=301,L]
Większość odpowiedzi nawet zaakceptowała jedną, Nie używaj tej sztuczki.
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
2018-09-27 08:46:37
Istnieje wiele rozwiązań. Oto link do Apache wiki, która zajmuje się tym problemem bezpośrednio.
Http://wiki.apache.org/httpd/RewriteHTTPToHTTPS
RewriteEngine On
# This will enable the Rewrite capabilities
RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
# This rule will redirect users from their original location, to the same location but using HTTPS.
# i.e. http://www.example.com/foo/ to https://www.example.com/foo/
# The leading slash is made optional so that this will work either in httpd.conf
# or .htaccess context
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-05-23 07:47:33
To jest najlepszy sposób, jaki znalazłem dla Proxy, a nie Użytkowników proxy
RewriteEngine On
### START WWW & HTTPS
# ensure www.
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# ensure https
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
### END WWW & HTTPS
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-09-09 16:09:30
Aby przekierować http://lub https: / / na https://www możesz użyć następującej reguły we wszystkich wersjach apache:
RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ https://www.example.com%{REQUEST_URI} [NE,L,R]
Apache 2.4
RewriteEngine on
RewriteCond %{REQUEST_SCHEME} http [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ https://www.example.com%{REQUEST_URI} [NE,L,R]
Zauważ, że zmienna %{REQUEST_SCHEME} jest dostępna do użycia od apache 2.4 .
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-06-28 16:52:48
Jeśli jesteś na CloudFlare, upewnij się, że używasz czegoś takiego.
# BEGIN SSL Redirect
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
# END SSL Redirect
To uratuje cię od pętli przekierowania i bezpiecznie przekieruje Twoją witrynę do SSL.
P. S. dobrym pomysłem jest sprawdzenie mod_rewrite.c!
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-07-10 04:52:41
Ustaw w swoim .plik htaccess
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
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
2017-07-25 14:17:22
Staram się pierwsza odpowiedź i to nie działa... To dzieło:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{ENV:HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
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
2018-08-30 14:45:25
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
Uwagi: upewnij się, że wykonałeś następujące kroki
- sudo a2enmod rewrite
to strona internetowa, w której znajdziesz wiele ciekawych informacji.]} W związku z tym, że nie jesteśmy w stanie sprostać wymaganiom naszych klientów, nie jesteśmy w stanie sprostać wymaganiom naszych klientów.conf
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
Require all granted
</Directory>
Teraz twoja .htaccess will pracy, a Twoja strona przekieruje na http: / / do https://www
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
2018-09-07 21:48:37
To będzie działać zarówno dla https i www
RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS
RewriteRule ^/?(.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
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-05-20 16:14:49