HOWTO · PHP
Reindirizza in PHP
Questo tutorial mostra come reindirizzare un utente da una pagina a una pagina diversa in PHP
In questa pagina
Per reindirizzare una richiesta in PHP, invia un’intestazione di risposta Location con header() prima che lo script produca HTML o altro contenuto, quindi interrompi lo script. L’esempio seguente porta il browser a un URL di destinazione. Inserisci il file PHP in un server web locale e aprilo nel browser per vedere la navigazione.
Reindirizzare a un URL con la funzione header() di PHP
La funzione header() invia un’intestazione di risposta HTTP. Per un reindirizzamento, il campo dell’intestazione è Location e il suo valore è l’URL di destinazione. PHP deve inviare questa intestazione prima di qualsiasi contenuto del corpo della risposta, compresi gli spazi bianchi al di fuori dei tag PHP. Mantieni il codice di reindirizzamento all’inizio del gestore della richiesta, prima dei template o dell’output della pagina.
Questo esempio autonomo usa una variabile per l’URL di destinazione. La chiamata a exit termina la richiesta corrente dopo aver preparato la risposta, così il resto della pagina non prosegue come se il reindirizzamento non fosse avvenuto. Il controllo di runtime fornito ha eseguito correttamente questo esempio e non ha prodotto output standard: il reindirizzamento è trasmesso nella risposta HTTP, non stampato come testo. Aprendo il file PHP tramite il server web locale, il browser dovrebbe raggiungere la destinazione indicata nell’esempio.
<?php
$url = 'https://example.com/';
header('Location: ' . $url);
exit;
?>
Usa un URL verso cui la tua applicazione è autorizzata a indirizzare gli utenti. Se la destinazione proviene dai dati della richiesta, convalidala rispetto a una lista consentita oppure ricavala da percorsi attendibili dell’applicazione; passare dati arbitrari forniti dall’utente a un reindirizzamento può portare i visitatori a un sito indesiderato. Per una route interna alla stessa applicazione, spesso è sufficiente un percorso come /account/.
Creare una funzione helper di reindirizzamento PHP con un codice di stato HTTP
Una funzione helper redirect riutilizzabile può accettare sia la destinazione sia lo stato della risposta. Il terzo argomento di header() è il codice di stato; il secondo controlla se un’intestazione con lo stesso nome sostituisce una precedente. L’helper seguente usa 302 come valore predefinito, comunemente impiegato per un reindirizzamento temporaneo, e accetta un altro stato quando la route lo richiede.
<?php
function redirect(string $url, int $statusCode = 302): void
{
header('Location: ' . $url, true, $statusCode);
exit;
}
redirect('https://example.com/', 301);
?>
L’esempio passa 301 per indicare che la destinazione è permanente. Usa questo stato solo se lo spostamento deve durare; browser e altri client potrebbero memorizzare i reindirizzamenti permanenti. 302 indica un reindirizzamento temporaneo ed è una scelta predefinita migliore quando la destinazione può cambiare. Il manuale PHP di header() documenta i parametri della funzione, mentre il riferimento MDN per 301 descrive lo stato permanente.
Il controllo di runtime fornito ha eseguito correttamente questo esempio con l’helper e non ha prodotto output standard: lo stato del reindirizzamento e l’intestazione Location fanno parte della risposta HTTP, non sono testo stampato. Esegui il file PHP tramite un server web locale per osservare la navigazione del browser. La funzione termina la richiesta dopo aver impostato l’intestazione di risposta. In un’applicazione reale, convalida l’URL prima di chiamare l’helper e scegli uno stato coerente con la natura temporanea o permanente dello spostamento. L’intestazione Location e lo stato fanno parte della risposta HTTP, quindi questo approccio funziona prima che il browser riceva il corpo della pagina.
Usare JavaScript come soluzione di ripiego per il reindirizzamento lato client
Quando non è disponibile un reindirizzamento lato server, una pagina può chiedere al browser di navigare usando window.location. È una navigazione lato client: PHP invia il contenuto della pagina e il browser esegue lo script. Non è buffering dell’output PHP e non trasforma la risposta HTTP in un reindirizzamento lato server. Inoltre, richiede che JavaScript sia abilitato; se il server può decidere la destinazione prima di inviare la pagina, usa l’approccio PHP con header().
Il seguente snippet per una pagina web mostra questa soluzione di ripiego. Aggiungilo a una pagina servita dal server web locale e aprila in un browser con JavaScript abilitato per raggiungere la destinazione. Lo snippet è presentato come codice sorgente per il browser e non è stato eseguito per questo articolo.
<script>
window.location = "https://example.com/";
</script>
Poiché questo codice viene eseguito nel browser, non può inviare uno stato di reindirizzamento HTTP come 301 nella risposta già ricevuta. Mantieni fissa la destinazione oppure convalida qualsiasi valore usato per costruirla, come faresti con un reindirizzamento lato server. Usa questa soluzione solo quando la navigazione lato client è adatta alla pagina; i visitatori che hanno disabilitato JavaScript resteranno sulla pagina originale.