Avvisi di contenuto misto dopo aver cambiato l'indirizzo del sito da HTTP a HTTPS
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
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:
- 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).
- Vai su Strumenti > Better Search Replace
- Aggiungi la versione non SSL del tuo sito nel campo di ricerca (es.
http://example.com
) e la versione SSL nel campo di sostituzione - Seleziona le tabelle che vuoi aggiornare. Molto probabilmente avrai solo bisogno delle tabelle
wp_posts
ewp_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. - Esegui un "dry run" per assicurarti che funzioni tutto correttamente
- Se funziona, deseleziona l'opzione "dry run" ed esegui l'operazione per davvero.
- 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.

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

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

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

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

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

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

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

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.

@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

@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 Infatti, inizialmente pensavo fosse solo una questione di modificare l'URL nelle impostazioni generali (e ovviamente reindirizzare a HTTPS), ma mi sbagliavo

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

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.

@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 Le immagini si trovano sullo stesso tuo dominio? Anche se sono hardcoded, la regola di rewrite dovrebbe reindirizzarle. Stai usando qualche tipo di CDN?

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

Ho utilizzato Better Search Replace e Really Simple SSL e il vincitore è:
Basta fare questo:
- Installalo
- Attivalo
- Consenti SSL
Fatto
Ha anche risolto tutti i problemi con il reindirizzamento delle immagini

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.

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)

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

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

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

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?
