Redirecționare toate cererile HTTP către HTTPS prin .htaccess în WordPress

23 aug. 2016, 00:33:22
Vizualizări: 82.7K
Voturi: 12

Am făcut asta de multe ori înainte și totuși, din motive necunoscute, nu reușesc să o fac din nou. Am încercat nenumărate soluții. Tot ce am încercat duce la o buclă infinită de redirecționare.

Care este cea mai bună opțiune pentru a face acest lucru?

Actualizare 1 Iată câteva dintre lucrurile încercate:

RewriteCond %{HTTP_HOST} ^website\.co\.uk [NC]
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.website.co.uk/$1 [R,L]

Și:

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.website.co.uk$1 [R,L]

Am testat în diferite browsere pentru a preveni problemele de cache. Tot nu funcționează, primesc doar o buclă continuă de redirecționare.

8
Comentarii

Încearcă să trasezi redirecționarea: http://redirectdetective.com/

jdm2112 jdm2112
23 aug. 2016 00:45:16

Am testat asta (am actualizat întrebarea cu informații suplimentare) - am dezactivat chiar și cache-ul din Google Chrome pentru a evita astfel de probleme, http://stackoverflow.com/questions/5690269/disabling-chrome-cache-for-website-development

Michael Cropper Michael Cropper
23 aug. 2016 00:45:39

Ai încercat pe invers? RewriteCond %{SERVER_PORT} !^433$

David David
23 aug. 2016 01:10:11

Cu răspunsul pe care ți l-am dat în întrebarea ta anterioară, nu au fost rezolvate toate problemele tale legate de HTTPS? Sau faci asta pentru a consolida HTTPS pe întregul site web?

Ethan Rævan Ethan Rævan
23 aug. 2016 01:50:55

Da, pentru acea întrebare s-a rezolvat, mulțumesc. Vreau să rezolv totul astfel încât, dacă cineva accesează versiunea http a site-ului, să fie redirecționat cu 301 către https.

Michael Cropper Michael Cropper
23 aug. 2016 11:48:04

@MichaelCropper acest lucru ar trebui să fie gestionat automat atunci când ai actualizat URL-urile de acasă și ale site-ului, atâta timp cât ai setările implicite .htaccess care au fost generate de WordPress.

Ethan Rævan Ethan Rævan
23 aug. 2016 16:08:36

Este ciudat. Se pare că face o redirecționare 301 automat pe pagina principală, dar nu și pe restul site-ului. Vezi aici, această pagină este încă accesibilă pe HTTP, http://www.michaelcropper.co.uk/contact-me/ - Testez pe site-ul personal înainte de a implementa peste tot.

Michael Cropper Michael Cropper
23 aug. 2016 16:20:20

Asigură-te că folosești @EthanJinksO'Sullivan ca să primesc notificare când răspunzi și pot să revin rapid la tine. Îți voi da răspunsul mai jos

Ethan Rævan Ethan Rævan
23 aug. 2016 19:37:54
Arată celelalte 3 comentarii
Toate răspunsurile la întrebare 9
4
21

Am înțeles, când introduceți un link către pagina dumneavoastră, altul decât pagina principală, de exemplu:

  • http://www.michaelcropper.co.uk/contact-me
  • www.michaelcropper.co.uk/contact-me
  • michaelcropper.co.uk/contact-me

Dacă prefixul https:// nu este prezent, se încarcă link-ul HTTP. Adăugați următoarele în fișierul .htaccess între tag-ul <IfModule mod_rewrite.c>:

RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]

Dacă nu au fost făcute modificări suplimentare în fișierul .htaccess, acesta ar trebui să arate astfel:

# 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]
# Redirecționează HTTP la HTTPS
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]
</IfModule>
# END WordPress

Anunțați-mă cum merge.

23 aug. 2016 19:46:50
Comentarii

Mulțumesc @EthanJinksO'Sullivan, a funcționat. Destul de ciudat, am găsit o altă configurație unde aveam acest lucru funcțional, care era foarte asemănătoare cu configurația inițială pe care am testat-o și care a funcționat și ea în această dimineață RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://www.michaelcropper.co.uk/$1 [R=301,L] - Bazat pe asta, ar trebui să presupun că ceva undeva era cache-uit. Cine știe cu siguranță.

Michael Cropper Michael Cropper
24 aug. 2016 12:39:57

A trebuit să rescriu codul după RewriteBase .

Harish ST Harish ST
24 oct. 2018 08:01:12

Nu a funcționat pentru mine - regulile https par să trebuiască să fie puse înainte, pentru a funcționa și cu paginile interne.

tishma tishma
20 nov. 2018 15:12:13

Așa cum au spus și ceilalți comentatori: Trebuie să introduceți cele două linii imediat după RewriteBase /. În poziția arătată în răspuns, va funcționa doar pentru pagina principală.

tanius tanius
24 sept. 2019 15:06:09
0

Adăugați cod în fișierul .htaccess

 <IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteBase /

   RewriteCond %{HTTPS} !=on
   RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

   # ÎNCEPUT WordPress
   RewriteRule ^index\.php$ - [L]
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule . /index.php [L]
 </IfModule>
17 feb. 2019 10:57:00
2

Puteți seta antetul în fișierul .htaccess

<IfModule mod_headers.c>
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" env=HTTPS
</IfModule>
11 sept. 2018 16:38:21
Comentarii

Acest lucru m-a ajutat, în timp ce niciuna dintre soluțiile de mai sus nu a funcționat.

Clain Dsilva Clain Dsilva
7 ian. 2020 04:59:57

+1 Această soluție are avantajul că este mai puțin probabil să creeze conflicte cu regulile existente din mod_rewrite.c

Dave A-W Dave A-W
27 apr. 2020 07:23:30
0

încearcă asta în fișierul tău .htaccess:

RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
</IfModule>
# END WordPress
19 sept. 2018 13:31:14
1

Adaugă acest cod în fișierul tău .htaccess

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
28 mai 2018 12:57:10
Comentarii

o explicație despre cum acest cod rezolvă întrebarea OP ar fi întotdeauna binevenită

cjbj cjbj
28 mai 2018 13:40:43
0

Dacă utilizați W3 Total Cache, răspunsul de la @Ethan Jinks O'Sullivan va funcționa doar dacă plasați redirecționarea înainte de modulele W3 Total Cache în fișierul .htaccess, așa cum este arătat mai jos:

# BEGIN Redirecționare HTTP către HTTPS
<IfModule mod_rewrite.c>
  RewriteCond %{HTTPS} !=on
  RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]
</IfModule>
# END Redirecționare HTTP către HTTPS

# BEGIN Compresie GZIP
...
# END Compresie GZIP

# BEGIN Compresie DEFLATE
...
# END Compresie DEFLATE

# BEGIN Cache pentru browser W3TC
...
# END Cache pentru browser W3TC

# BEGIN Cache de pagini W3TC core
...
# END Cache de pagini W3TC core

# 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
19 iul. 2018 10:33:30
0

Dacă nu dori să modifici nimic în .htaccess poți încerca această soluție:

add_action('template_redirect', 'redirect_core', 50);
add_action('init', 'redirect_core', 50);
add_action('wp_loaded', 'redirect_core', 50);
function redirect_core(){
  if (!is_ssl()) {
    wp_redirect('https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301);
    exit();
  }
}

Sau poți încerca acest plugin: HTTPS Redirect

6 nov. 2019 08:35:20
0
-1

Mi-a luat 10 minute să rezolv problema

Adaugă un fișier de configurare pentru domeniul tău.

Accesează CentOS 7 la /etc/httpd/conf.d/, apoi creează un fișier de configurare numit orice.conf.

Introdu următorul cod în el:

<VirtualHost *:80>
    ServerName domain.com
    ServerAlias www.domain.com
    ServerAdmin webmaster@domain.com
    DocumentRoot /var/www/html

    <Directory /var/www/html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
    </Directory>

    ErrorLog /var/log/httpd/example.com-error.log
    CustomLog /var/log/httpd/example.com-access.log combined
</VirtualHost>

Înlocuiește example.com cu domeniul tău.
Apoi adaugă codul de rescriere HTTPS în .htaccess și va funcționa. :)

30 iun. 2019 01:59:14
1
-1
#ÎNCEPUT Redirecționare HTTP la HTTPS
<IfModule mod_rewrite.c>
  RewriteCond %{HTTPS} !=on
  RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]
</IfModule>
#SFÂRȘIT Redirecționare HTTP la HTTPS

# ÎNCEPUT 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>
# SFÂRȘIT WordPress
13 aug. 2019 13:35:34
Comentarii

În ce fel răspunsul tău diferă de cel al lui @ChrisSprague?

nmr nmr
13 aug. 2019 13:49:27