Reindirizzare tutte le richieste HTTP a HTTPS tramite .htaccess in WordPress
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.

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.

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.

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

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>

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

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

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

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à. :)

#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
