Avvisi di contenuto misto dopo aver cambiato l'indirizzo del sito da HTTP a HTTPS

4 apr 2017, 18:35:15
Visualizzazioni: 17.9K
Voti: 5

Ho cambiato l'indirizzo del mio sito da HTTP a HTTPS modificando semplicemente l'URL in Impostazioni -> Generale (Indirizzo WordPress e Indirizzo sito). Nessun problema nell'area di amministrazione, tutto funziona correttamente.

Nella parte pubblica del sito invece: c'è molto "contenuto misto", tanto che Firefox segnala che il sito non è sicuro. Ho notato (visualizzando il codice sorgente) che quasi tutte le immagini che ho caricato nella galleria media vengono ancora "renderizzate" con HTTP invece di HTTPS.

Cosa posso fare per servire immagini, font, ecc. con un URL HTTPS?

[AGGIORNAMENTO] Ho trovato che alcuni problemi possono essere risolti modificando due file del tema con "http://" hardcoded. Il problema principale sono le immagini, se non vuoi modificare il database apparentemente non c'è soluzione

0
Tutte le risposte alla domanda 5
14

Questo accade perché WordPress salva gli URL nel contenuto in modo assoluto per impostazione predefinita (il che significa che in realtà i tuoi URL sono salvati come http://example.com nel database). Per risolvere questo problema, dovrai eseguire una ricerca e sostituzione nel tuo database per correggere questi errori.

Personalmente, mi piace utilizzare il plugin Better Search Replace perché ha un'utile funzionalità che ti permette di testare la tua ricerca/sostituzione in modalità "dry run". Ci sono molti altri metodi per eseguire la ricerca e sostituzione, e potresti anche apportare le modifiche direttamente in PhpMyAdmin, ma qui fornirò le istruzioni per utilizzare il plugin Better Search Replace.

Supponendo che tu stia utilizzando Better Search Replace:

  1. FARE UN BACKUP DEL DATABASE! Sempre, sempre, sempre. Puoi utilizzare qualsiasi strumento preferisci (UpdraftPlus, oppure esportarlo (NON ELIMINARLO) da PhpMyAdmin o direttamente da MySQL sono tutte opzioni valide).
  2. Vai su Strumenti > Better Search Replace
  3. Aggiungi la versione non SSL del tuo sito nel campo di ricerca (es. http://example.com) e la versione SSL nel campo di sostituzione Esempio di ricerca e sostituzione 1
  4. Seleziona le tabelle che vuoi aggiornare. Molto probabilmente avrai solo bisogno delle tabelle wp_posts e wp_postmeta, ma puoi selezionarle tutte se preferisci. Tieni presente che potrebbe richiedere più tempo e causare un timeout, a seconda delle specifiche del tuo server.Seleziona le tue tabelle
  5. Esegui un "dry run" per assicurarti che funzioni tutto correttamente Dry run
  6. Se funziona, deseleziona l'opzione "dry run" ed esegui l'operazione per davvero.
  7. Controlla il tuo sito per verificare che gli errori siano stati risolti. Se è così, fantastico!

Nota: Ogni volta che esegui una ricerca/sostituzione c'è la possibilità di causare gravi problemi al tuo sito. Da qui il passo uno: fai un backup del tuo sito. Se qualcosa va storto, avrai un modo per ripristinare i tuoi dati.

4 apr 2017 19:04:10
Commenti

Recentemente ho aggiornato a SSL e Better Search Replace è stato un salvataggio. Fai sempre un backup del database prima di usarlo.

Christine Cooper Christine Cooper
4 apr 2017 19:23:52

@Ian Sono davvero sorpreso, e molto deluso da WP se una soluzione come questa è necessaria

3000 3000
4 apr 2017 19:44:58

Sì, il modo in cui WP salva gli URL, specialmente per le risorse, è davvero fastidioso.

Ian Ian
4 apr 2017 19:46:05

Quindi, cosa (diavolo) fa WordPress quando sostituisci http con https in Impostazioni > Generale?

3000 3000
4 apr 2017 19:52:40

downvotato perché sostituire semplicemente il testo nei post è sia eccessivo da un lato (colleghi a un URL http di un pdf sul tuo sito e vuoi mantenerlo http), e potrebbe non essere sufficiente dall'altro (incorpori un'immagine via http da un altro sito).

Mark Kaplun Mark Kaplun
5 apr 2017 12:12:14

@MarkKaplun Sono davvero sorpreso dal comportamento di WP in questo caso: suppongo che ciò accadrebbe anche se prendessi il tuo database e spostassi l'intero sito su un altro dominio. Onestamente, richiede troppo lavoro

3000 3000
5 apr 2017 12:21:28

@3000 in realtà le persone che ti dicono "usa semplicemente Let's Encrypt" o simili, ti stanno vendendo fumo negli occhi. HTTPS è complicato per vari motivi, ad esempio potresti dover usare una libreria JS che viene servita solo su HTTP e che smetterà di funzionare su HTTPS (un problema che ha avuto un mio cliente). Per essere completamente HTTPS non basta gestire correttamente i tuoi URL interni ma anche quelli delle risorse esterne utilizzate sul tuo sito, che di solito potrebbero richiedere solo di cambiare HTTP in HTTPS...

Mark Kaplun Mark Kaplun
5 apr 2017 12:30:57

...(se supportato) ma per alcune dovrai usare un URL completamente diverso per ottenere la stessa risorsa. In sintesi, non è affatto banale e non esiste una soluzione universale, quindi anche se il core avesse voluto gestirlo, fondamentalmente non c'è modo di farlo correttamente per tutti. Personalmente ignoro semplicemente gli avvisi di contenuto misto, le loro implicazioni per la sicurezza sono trascurabili se fai il login via HTTPS ed è estremamente difficile ripulirli tutti.

Mark Kaplun Mark Kaplun
5 apr 2017 12:33:27

modificare le immagini per utilizzare un protocollo neutro è probabilmente la soluzione più semplice e vantaggiosa su questo fronte, e puoi farlo con un piccolo snippet o tramite search replace, ma uno che targetti specificamente gli URL dei media.

Mark Kaplun Mark Kaplun
5 apr 2017 12:35:19

@MarkKaplun Il 99% del mio problema attuale riguarda le immagini: ho trovato alcuni URL HTTP per risorse esterne (JS e font) ma ho verificato che possono essere facilmente sostituiti con HTTPS. Sviluppo (altre cose) da anni e, come sviluppatore, trovo che questo problema dei percorsi sia davvero qualcosa di "sorprendente", per non dire incredibile

3000 3000
5 apr 2017 12:59:27

@300 in parte questo è il risultato del fatto che il core non ha mai completato il (ormai molto vecchio) piano di avere una migrazione ad altri URL root come parte del core. Se ci fosse stato uno strumento del genere almeno parte del dolore non ci sarebbe.

Mark Kaplun Mark Kaplun
5 apr 2017 13:08:20

@Mark Kaplun Infatti, inizialmente pensavo fosse solo una questione di modificare l'URL nelle impostazioni generali (e ovviamente reindirizzare a HTTPS), ma mi sbagliavo

3000 3000
5 apr 2017 13:18:15

Assolutamente non capisco il voto negativo. Questa è una risposta valida anche se non è ciò che l'autore del post sperava. Considerando l'importanza dell'SSL al giorno d'oggi, specialmente per la SEO, questo è un buon modo per risolvere quegli avvisi di contenuto misto. Ci sono altre risposte a questa domanda che non utilizzano il metodo cerca e sostituisci, fantastico! L'intero scopo di questo sito è fornire domande e risposte di alta qualità per aiutarci a vicenda!

Ian Ian
5 apr 2017 16:26:58

@Ian Se può essere utile, ho provato cose molto simili a quelle che spieghi semplicemente usando la funzione di ricerca all'interno di PHPMyAdmin e una sostituzione MySQL. Nel mio caso, le uniche tabelle interessate sono wp_posts (migliaia), wp_options e wp_usermetas (pochissime voci). Inoltre, ho trovato un commento molto interessante qui: http://wordpress.stackexchange.com/questions/90206/wp-posts-guid-update (quello con lo sfondo giallo) :-)

3000 3000
7 apr 2017 19:25:31
Mostra i restanti 9 commenti
5

Dovrai reindirizzare tutto il tuo traffico da HTTP a HTTPS. Una regola di riscrittura può farlo per te. Usa questo codice al posto della regola di riscrittura originale di WordPress (se non stai utilizzando la cache) nel tuo file .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

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

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

Ci sono anche plugin che possono farlo per te, come Easy HTTPS Redirection.

4 apr 2017 19:02:31
Commenti

Questo è un ottimo modo per procedere senza dover intervenire sul database!

Ian Ian
4 apr 2017 19:05:22

@Jack Johansson Ho reindirizzato il sito in questo modo ma c'è anche del mixed content. Per qualche motivo, il percorso delle immagini deve essere hard-codificato da qualche parte (non riesco a capire dove sia questo "qualche parte") :-)

3000 3000
4 apr 2017 19:41:39

@3000 Le immagini si trovano sullo stesso tuo dominio? Anche se sono hardcoded, la regola di rewrite dovrebbe reindirizzarle. Stai usando qualche tipo di CDN?

Johansson Johansson
4 apr 2017 19:43:18

@JackJohansson Ho notato che ho tre tipi di problemi: immagini (sotto lo stesso dominio), font (CDN) e un widget Flickr che non funziona più (servito anche da un indirizzo http esterno)

3000 3000
4 apr 2017 19:46:34

Questo funzionerà per reindirizzare gli URL (ed è una buona idea se stai passando a tutto-HTTPS), ma a quel punto è troppo tardi per prevenire gli avvisi di contenuto misto. L'URL sulla pagina deve essere HTTPS fin dall'inizio.

Matthew Crumley Matthew Crumley
4 apr 2017 23:08:26
0

Ho utilizzato Better Search Replace e Really Simple SSL e il vincitore è:

Really Simple SSL

Basta fare questo:

  1. Installalo
  2. Attivalo
  3. Consenti SSL

Fatto

Ha anche risolto tutti i problemi con il reindirizzamento delle immagini

15 gen 2019 11:44:31
2
-1

Installa questo plugin: https://wordpress.org/plugins/http-https-remover/

Nonostante il nome - HTTP / HTTPS Remover - l'ultima versione forzerà tutti gli http in https, e i tuoi avvisi di contenuto misto spariranno.

4 apr 2017 19:03:40
Commenti

Il problema con un plugin come questo è: devo sapere cosa fa "a basso livello" (se un plugin rompe il mio sito web devo ricreare il sito da capo)

3000 3000
4 apr 2017 19:50:48

votato negativamente perché così com'è non è una risposta molto utile. Questo potrebbe essere il miglior plugin per gestire il problema, ma le persone che leggono la risposta dovrebbero avere un'idea chiara di cosa fa e come funziona

Mark Kaplun Mark Kaplun
5 apr 2017 12:01:51
5
-1

Ho appena spostato il sito della mia azienda alla versione solo sicura venerdì scorso. Ho utilizzato il Plugin Really Simple SSL e poi ho aggiunto un reindirizzamento 301 nel mio file .htaccess.

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

Non dimenticare di verificare anche la versione HTTPS del tuo sito in Search Console / Webmaster Tools

4 apr 2017 19:12:38
Commenti

reindirizzare al tuo file htaccess???

3000 3000
4 apr 2017 19:48:55

Ho aggiunto il codice al mio file .htaccess che dovrebbe reindirizzare qualsiasi cosa da http a https.

fwho fwho
4 apr 2017 19:51:47

Comunque, questo codice non funziona per me: immagini ecc. vengono ancora servite con http:// invece di https://. Suppongo - correggimi se sbaglio - un problema di cache

3000 3000
4 apr 2017 20:30:13

Potrei sbagliarmi completamente, ma non credo che un'immagine venga memorizzata nella cache e caricata via HTTPS da una versione non sicura. Stai inserendo il link con l'URL completo, come http://example.com/image.png nel testo stesso?

fwho fwho
4 apr 2017 20:41:01

WP crea direttamente i link con http:// preposto: ho scaricato il database e i link sono presenti ovunque

3000 3000
5 apr 2017 09:27:07