Reindirizzare tutte le richieste HTTP a HTTPS tramite .htaccess in WordPress

23 ago 2016, 00:33:22
Visualizzazioni: 82.7K
Voti: 12

Ho fatto questo molte volte prima, eppure per qualche motivo sconosciuto non riesco a farlo di nuovo. Ho provato infinite soluzioni. Tutto ciò che ho provato risulta in un loop infinito di reindirizzamenti.

Qual è la migliore opzione per farlo?

Aggiornamento 1 Ecco alcune delle cose che ho provato:

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

E:

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

Ho testato in diversi browser per prevenire problemi di caching. Ancora niente, continuo solo ad ottenere un loop di reindirizzamento continuo.

8
Commenti

Prova a tracciare il reindirizzamento: http://redirectdetective.com/

jdm2112 jdm2112
23 ago 2016 00:45:16

L'ho testato (domanda aggiornata con informazioni aggiuntive) - ho anche disabilitato la cache di Google Chrome per evitare problemi come questo, http://stackoverflow.com/questions/5690269/disabling-chrome-cache-for-website-development

Michael Cropper Michael Cropper
23 ago 2016 00:45:39

Hai provato l'approccio opposto? RewriteCond %{SERVER_PORT} !^433$

David David
23 ago 2016 01:10:11

Con la risposta che ti ho dato nella tua domanda precedente, non ha risolto tutti i tuoi problemi con HTTPS? O stai facendo questo per rinforzare HTTPS su tutto il tuo sito web?

Ethan Rævan Ethan Rævan
23 ago 2016 01:50:55

Sì, per quella domanda ha funzionato, grazie. Voglio sistemare tutto in modo che se qualcuno accede alla versione HTTP del sito venga reindirizzato con un 301 a HTTPS.

Michael Cropper Michael Cropper
23 ago 2016 11:48:04

@MichaelCropper questo dovrebbe essere gestito automaticamente quando hai aggiornato l'URL home e del sito, a patto che tu abbia le impostazioni predefinite del file .htaccess generate da WordPress.

Ethan Rævan Ethan Rævan
23 ago 2016 16:08:36

È strano. Sembra che faccia un reindirizzamento 301 automaticamente sulla homepage, ma non sul resto del sito. Vedi qui, questa pagina è ancora accessibile via HTTP, http://www.michaelcropper.co.uk/contact-me/ - Sto testando sul mio sito personale prima di implementarlo ovunque.

Michael Cropper Michael Cropper
23 ago 2016 16:20:20

Assicurati di usare @EthanJinksO'Sullivan così riceverò una notifica quando rispondi e potrò tornare da te rapidamente. Ti darò la mia risposta qui sotto

Ethan Rævan Ethan Rævan
23 ago 2016 19:37:54
Mostra i restanti 3 commenti
Tutte le risposte alla domanda 9
4
21

Capisco, quando inserisci un link alla tua pagina diverso dalla home, ad esempio:

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

Se il prefisso https:// non è presente, viene caricato il link HTTP. Aggiungi il seguente codice nel tuo file .htaccess all'interno del tag <IfModule mod_rewrite.c>:

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

Se non sono state apportate modifiche aggiuntive al tuo .htaccess, dovrebbe apparire così:

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

Fammi sapere come va.

23 ago 2016 19:46:50
Commenti

Grazie @EthanJinksO'Sullivan questo ha funzionato. Stranamente, ho trovato un'altra configurazione dove avevo questo funzionante che era molto simile alla configurazione originale che ho testato e che funzionava anche questa mattina RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://www.michaelcropper.co.uk/$1 [R=301,L] - Basandomi su questo, dovrei supporre che qualcosa da qualche parte veniva cachato. Chissà con certezza.

Michael Cropper Michael Cropper
24 ago 2016 12:39:57

Ho dovuto riscrivere il codice dopo il RewriteBase .

Harish ST Harish ST
24 ott 2018 08:01:12

Non ha funzionato per me - le regole https sembrano dover venire prima, per funzionare anche con le pagine interne.

tishma tishma
20 nov 2018 15:12:13

Come hanno detto gli altri commentatori: Devi inserire le due righe subito dopo RewriteBase /. Nella posizione mostrata nella risposta, funzionerà solo per la homepage.

tanius tanius
24 set 2019 15:06:09
0

Aggiungi codice all'interno di un file .htaccess

 <IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteBase /

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

   # BEGIN 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

Puoi impostare l'header nel file .htaccess

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

Questo mi ha aiutato, mentre nessuna delle soluzioni sopra ha funzionato.

Clain Dsilva Clain Dsilva
7 gen 2020 04:59:57

+1 Questo ha il vantaggio che è meno probabile che causi conflitti con le regole esistenti di mod_rewrite.c

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

prova questo nel tuo .htaccess:

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

Aggiungi semplicemente questo nel tuo file .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 mag 2018 12:57:10
Commenti

una spiegazione sul perché questo codice risolva la domanda dell'OP è sempre gradita

cjbj cjbj
28 mag 2018 13:40:43
0

Se stai utilizzando W3 Total Cache, la risposta di @Ethan Jinks O'Sullivan funzionerà solo se inserisci il reindirizzamento prima delle modifiche di W3 Total Cache nel file .htaccess, come mostrato di seguito

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

# BEGIN GZIP COMPRESSION
...
# END GZIP COMPRESSION

# BEGIN DEFLATE COMPRESSION
...
# END DEFLATE COMPRESSION

# BEGIN W3TC Browser Cache
...
# END W3TC Browser Cache

# BEGIN W3TC Page Cache core
...
# END W3TC Page Cache 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 lug 2018 10:33:30
0

Se non vuoi modificare nulla nel file .htaccess puoi provare questo codice:

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();
  }
}

Oppure prova questo plugin: HTTPS Redirect

6 nov 2019 08:35:20
0
-1

Mi ci sono voluti 10 minuti per risolvere il problema

Aggiungi un file di configurazione per il tuo dominio.

Vai su CentOS 7 nella cartella /etc/httpd/conf.d/, poi crea un file di configurazione chiamato anything.conf.

Inserisci il seguente codice al suo interno:

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

Sostituisci example.com con il tuo dominio.
Poi aggiungi il codice di riscrittura HTTPS su .htaccess e funzionerà. :)

30 giu 2019 01:59:14
1
-1
#INIZIO Reindirizza da HTTP a HTTPS
<IfModule mod_rewrite.c>
  RewriteCond %{HTTPS} !=on
  RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]
</IfModule>
#FINE Reindirizza da HTTP a HTTPS

# INIZIO 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>
# FINE WordPress
13 ago 2019 13:35:34
Commenti

In che modo la tua risposta è diversa da quella di @ChrisSprague?

nmr nmr
13 ago 2019 13:49:27