Quale codice di stato?
- 301 (Moved Permanently): lo standard per pagine e domini spostati in modo definitivo. I motori di ricerca adottano il nuovo URL; i browser possono tenere il redirect in cache a lungo.
- 308 (Permanent Redirect): anch'esso permanente, ma metodo e corpo della richiesta restano invariati — un POST resta un POST. nginx supporta il 308 dalla versione 1.13.0.
- 302 (Found): temporaneo, ad esempio per manutenzione, test o pagine stagionali. Il vecchio URL resta nell'indice.
- 307 (Temporary Redirect): temporaneo, il metodo resta invariato.
Regola pratica: 301 per pagine e domini spostati per sempre, 308 per moduli ed endpoint API. Con 301 e 302 i browser di solito trasformano un POST in GET.
nginx e Apache a confronto
- nginx non conosce
.htaccess. Le regole stanno nella configurazione del server; dopo una modifica eseguinginx -te ricarica.returnè la forma più semplice e veloce;ifha senso solo se contiene unreturn(ad esempio per X-Forwarded-Proto). - Apache legge
.htaccesssolo seAllowOverridelo consente (per mod_rewrite bastaFileInfo) e mod_rewrite è attivo. Nella configurazione del vhost è più veloce.Redirect(mod_alias) vale per il percorso e tutto ciò che sta sotto;RewriteRuleè più flessibile. Non mescolarli per lo stesso URL.QSDrichiede Apache 2.4.0 o successivo. - Query string: con
returnnginx non la aggiunge da solo (usa$request_urio$is_args$args); Apache la mantiene finché la destinazione non ha una query propria (QSAaggiunge,QSDscarta). - Plesk: le direttive nginx vanno in Domini → il tuo dominio → Impostazioni di Apache e nginx → Direttive nginx aggiuntive, solo le righe interne al blocco server. Una
mapva nel contesto http. Per i casi semplici Plesk ha opzioni proprie nelle impostazioni di hosting (dominio preferito, redirect da HTTP a HTTPS).
Errori frequenti
- Loop: la destinazione riporta alla sorgente — ad esempio www → senza www nel web server, ma senza www → www nel CMS o nella CDN. Dietro un proxy che termina il TLS, il redirect da HTTP a HTTPS senza controllare
X-Forwarded-Protonon finisce mai. - Catene: A → B → C costa una richiesta e tempo per ogni passaggio, e i crawler seguono solo un numero limitato di redirect. Punta sempre all'URL finale.
- Tutto sulla home page: i motori di ricerca lo trattano come soft 404. Meglio la pagina davvero corrispondente, altrimenti 410 o 404.
- www e senza www mescolati: canonical, sitemap e link interni dovrebbero già usare l'host di destinazione.
- Query string dimenticata: parametri come
?utm_source=…o?id=7vanno persi. - 302 al posto di 301 per uno spostamento definitivo — oppure 301 già durante i test: i browser se lo ricordano.
Come testare e brevi FAQ
Con curl -sI -L --max-redirs 5 URL vedi ogni passaggio. Controlla la riga di stato (ad esempio HTTP/2 301), l'header location: (deve coincidere esattamente con la tua destinazione) e che l'ultimo passaggio risponda 200. Più di un redirect prima è una catena; curl: (47) Maximum (5) redirects followed indica un loop. Nel browser la cache può ingannare — prova in una finestra privata o con curl.
Posso mescolare 301 e 308? Sì, per i motori di ricerca sono entrambi permanenti. Per quanto tempo deve restare un redirect? Almeno un anno, meglio finché il vecchio URL riceve ancora visite o link. Il location = /vecchio vale anche per /vecchio/? No, una corrispondenza esatta vale solo per quel percorso.
Privacy
Gira interamente nel tuo browser; non viene inviato né salvato nulla.