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.

Author: Michael Berkowski, 2012-12-20

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

 523
Author: Michael Berkowski,
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]
 132
Author: Larzan,
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]
 89
Author: Andrew,
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.

 34
Author: Amir Forsati,
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
 23
Author: Vynz,
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
 23
Author: llioor,
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 .

 9
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-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!

 8
Author: Ahmad Awais,
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]
 0
Author: Adam Kozlowski,
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
 0
Author: Jackssn,
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

  1. sudo a2enmod rewrite
  2. 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

 0
Author: Kundan roy,
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]
 -2
Author: Nadeem As,
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