Modulo 3 · 3.2
www, reindirizzamento e contenuti misti
Modulo 3: Indirizzo, https e utenti · Tempo di lettura: 9 minuti
Obiettivo della lezione: al termine di questa lezione saprà scegliere un unico indirizzo principale, indirizzare tutte le varianti verso di esso con un solo reindirizzamento e individuare e risolvere i contenuti misti (mixed content).
Concetti chiave: indirizzo canonico, 301 e 308, catena di reindirizzamenti, contenuti misti (mixed content), cerca e sostituisci nel database, dati serializzati
Quattro indirizzi, un solo sito web
Il Suo sito web è raggiungibile tramite quattro indirizzi:
http://example.com
http://www.example.com
https://example.com
https://www.example.comPer un visitatore non fa differenza, ma per i motori di ricerca si tratta di quattro indirizzi diversi con lo stesso contenuto. Anche i cookie (come il Suo cookie di accesso) valgono per singolo nome: chi accede su www non risulta connesso sul dominio senza www. Per questo si sceglie un indirizzo canonico (l'indirizzo principale) e si reindirizzano gli altri tre verso di esso.
Quale scegliere è una questione di gusti (lezione 2.1). L'importante è che l'indirizzo principale sia lo stesso ovunque: nel DNS, nel certificato, in Impostazioni > Generali (lezione 3.1) e nei reindirizzamenti.
Reindirizzare con un 301, in un solo passaggio
Un reindirizzamento è una risposta del server: "questa pagina si trova altrove". Il browser passa quindi automaticamente al nuovo indirizzo. Il codice indica di che tipo di reindirizzamento si tratta:
| Codice | Significato | Utilizzo |
|---|---|---|
| 301 | Spostato in modo permanente | La scelta standard da http a https e da www al dominio senza www (o viceversa) |
| 308 | Permanente, e il metodo (ad esempio l'invio di un modulo) resta invariato | Si può usare anche per questo scopo; browser e motori di ricerca lo trattano come un 301 |
| 302 o 307 | Temporaneo | Solo per qualcosa di davvero temporaneo, come una pagina di manutenzione |
Un reindirizzamento permanente comunica ai motori di ricerca che il nuovo indirizzo è quello vero. Con uno temporaneo continuano a ricordare il vecchio indirizzo.
Faccia attenzione anche alla catena. Supponiamo che il Suo indirizzo principale sia https://example.com. In tal caso Lei desidera:
http://www.example.com 301 https://example.com/
http://example.com 301 https://example.com/
https://www.example.com 301 https://example.com/
https://example.com 200Ogni variante arriva all'indirizzo principale in un solo passaggio. Ciò che accade spesso:
http://www.example.com 301 https://www.example.com/
https://www.example.com 301 https://example.com/Funziona, ma costa un passaggio in più (tempo di attesa aggiuntivo, soprattutto su mobile) e un handshake TLS in più. Peggio ancora è un ciclo: il server web reindirizza a https, WordPress rimanda a http perché gli indirizzi nelle impostazioni sono ancora in http, e il browser segnala "troppi reindirizzamenti". In quel caso due impostazioni lavorano l'una contro l'altra. Si assicuri che un solo soggetto reindirizzi a https (il server web o il pannello) e che gli indirizzi in WordPress siano già impostati sull'indirizzo principale.
Anche WordPress effettua reindirizzamenti: se qualcuno richiede https://www.example.com/contact/ mentre l'indirizzo del sito è https://example.com, WordPress reindirizza a https://example.com/contact/. Questo funziona solo se la richiesta arriva a WordPress, quindi se il server web fa puntare anche il nome www a questo sito.
Contenuti misti
Si parla di contenuti misti (mixed content) quando una pagina https carica elementi tramite http://: un'immagine, un foglio di stile, uno script, un font o un video incorporato. Il browser lo considera non sicuro, perché questi elementi possono essere modificati durante il trasferimento.
- Script, fogli di stile e iframe caricati via http vengono bloccati dai browser. Il Suo sito web appare allora danneggiato oppure una funzione non funziona.
- Immagini, audio e video caricati via http vengono richiesti automaticamente via https dai browser moderni; se non è possibile, vengono bloccati. Il lucchetto può allora mostrare un avviso.
Da dove provengono:
- Vecchi link nei Suoi contenuti: un sito web che in passato era in http contiene in migliaia di articoli
<img src="http://example.com/wp-content/uploads/...">. WordPress salva questi link alla lettera nel database. - Impostazioni del tema o dei plugin con un indirizzo completo, ad esempio un logo o uno sfondo con
http://. - Elementi esterni di un altro sito raggiungibili solo via http. Questi vanno sostituiti o rimossi.
- Indirizzi in Impostazioni > Generali ancora impostati su http (lezione 3.1).
Come individuarli
Apra la pagina, prema F12 e guardi nella scheda Console. Il browser segnala ogni contenuto misto con l'indirizzo dell'elemento. In alternativa, cerchi nel codice sorgente della pagina (Ctrl+U) src="http:// e href="http://. I link ad altri siti nel testo normale (<a href="http://...">) non generano contenuti misti; si tratta delle cose che la pagina carica.
Cerca e sostituisci, ma nel modo giusto
La soluzione per i vecchi link nei Suoi contenuti consiste nel sostituire tutti gli http://example.com nel database con https://example.com. La tentazione è un comando SQL come:
UPDATE wp_options SET option_value = REPLACE(option_value, 'http://example.com', 'https://example.com');Non lo faccia. Molte impostazioni di temi, plugin e widget sono salvate in forma serializzata. Ha questo aspetto:
s:27:"http://example.com/logo.png";Il s:27 significa: segue un testo di 27 caratteri. Dopo una semplice sostituzione il testo è di 28 caratteri (si è aggiunta una s), ma c'è ancora scritto 27. PHP non riesce più a leggere il valore e l'impostazione scompare senza avvisi: un menu vuoto, un logo sparito, widget che non ci sono più.
Utilizzi uno strumento che aggiorni queste lunghezze e faccia sempre prima un backup (lezione 8.1): il cerca e sostituisci non ha un cestino.
- WP-CLI: prima controllare, poi eseguire. Nel terminale vada nella cartella del Suo WordPress ed esegua prima la prova (prima riga), solo dopo quella reale (seconda riga).
wp search-replace 'http://example.com' 'https://example.com' --skip-columns=guid --dry-run
wp search-replace 'http://example.com' 'https://example.com' --skip-columns=guidCon --dry-run vede quante sostituzioni verrebbero effettuate per ogni tabella, senza modificare nulla. --skip-columns=guid lascia invariati gli identificativi fissi degli articoli (colonna guid); WordPress consiglia di non modificarli mai. Senza opzioni aggiuntive WP-CLI agisce solo sulle tabelle di WordPress. Se un plugin ha tabelle proprie con lo stesso prefisso, aggiunga --all-tables-with-prefix. Usi --all-tables solo se sa perché: interessa ogni tabella del database, anche quelle di un altro sito o di un'altra applicazione.
- Un plugin di cerca e sostituisci che supporti i dati serializzati (ce ne sono diversi nella directory dei plugin di wordpress.org). Anche in questo caso usi prima la modalità di prova e poi rimuova di nuovo il plugin.
Non sostituisca mai qualcosa come example.com senza http:// o https:// davanti: in quel caso modificherebbe anche indirizzi email e altri testi. L'intera procedura, anche per chi non dispone di un terminale, è descritta nell'articolo della knowledge base sul cerca e sostituisci nel database di WordPress (vedere Approfondimenti).
In pratica: ecco come appare in un pannello
Come esempio utilizziamo DirectAdmin. Altri pannelli hanno un interruttore simile per "sempre https".
- Nelle impostazioni del dominio attivi Forza SSL con reindirizzamento https (lezione 3.1).
- Scelga per il dominio se www deve puntare al dominio senza www o viceversa (in DirectAdmin nelle impostazioni del dominio; altrimenti con un reindirizzamento tramite Reindirizzamenti del sito o
.htaccess). - Verifichi la catena con l'esercizio qui sotto oppure con gli strumenti per sviluppatori del Suo browser (scheda Network, casella "Conserva log").
Riepilogo
- Scelga un indirizzo canonico e faccia arrivare le altre tre varianti a esso con un 301 (o 308), in un solo passaggio.
- Lasci che un solo soggetto reindirizzi a https; altrimenti si crea un ciclo.
- I contenuti misti sono una pagina https che carica elementi via http; la console del browser mostra quali.
- I vecchi link nel database si sostituiscono con
wp search-replaceo con un plugin che gestisce i dati serializzati, mai con un semplice REPLACE in SQL. - Sempre prima un backup e prima una prova (
--dry-run); lasci invariata la colonnaguide si limiti alle tabelle di WordPress.
Quiz
Esercizio
Esercizio A3.2: Un solo indirizzo principale e nessun contenuto misto. Inserisca il Suo dominio. Il programma apre le quattro varianti (http e https, con e senza www) e segue i reindirizzamenti. Il risultato è corretto se tutte e quattro arrivano allo stesso indirizzo in https, con al massimo un reindirizzamento per variante e solo codici permanenti (301 o 308). Successivamente il programma legge l'HTML della homepage e cerca script, fogli di stile, immagini, iframe e font caricati tramite http://.
Approfondimenti
Questi articoli descrivono i passaggi nei pannelli di WebOké; negli altri pannelli funzionano in modo simile.
- Guida DirectAdmin 6.4: Reindirizzare sempre i visitatori a https
- Guida DirectAdmin 4.7: Reindirizzamenti del sito: reindirizzare un dominio o una pagina
- Cercare e sostituire nel database di WordPress
- Reindirizzare obbligatoriamente i visitatori a https
- Corso gratuito DNS 3.4: www, reindirizzamento e ciò che il DNS non fa
- Contenuti misti (MDN, in inglese): https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content
- wp search-replace (developer.wordpress.org, in inglese): https://developer.wordpress.org/cli/commands/search-replace/
