Come implementare un redirect alla pagina precedente in PHP? Restiamo in tema delle funzionalità di navigazione nel nostro sito web, sapere da quale pagina proviene un navigatore o reindirizzarlo all'ultima pagina visitata, in php è molto semplice, basta sfruttare la variabile server globale $_SERVER['HTTP_REFERER'], andiamo a vedere come fare.
Quando navighiamo con il nostro browser, da un sito ad un altro, o tra le pagine di uno stesso sito; il Browser può conservare il valore dell'url (indirizzo) della pagina dalla quale si proviene, detto valore prende il nome di HTTP_REFERER, ed in php vi si può accedere tramite l'array associativo delle variabili server super globali, ossia $_SERVER.
Quindi per conoscere il REFERER, la pagina dalla quale proviene il navigatore che arriva sul nostro sito, in php basta scrivere:
<?php
echo $_SERVER['HTTP_REFERER'];
?>
Avendo il valore del referral o pagina precedente (interna o esterna al nostro sito), implementare un redirect alla pagina precedente in php è davvero un gioco da ragazzi, scriveremo
<?php
header('Location: ' . $_SERVER['HTTP_REFERER']);
exit();
?>
Aggiungete la chiamata alla funzione exit(), per interrompere l'interprete php nella lettura dell'eventuale codice sottostante all'header.
Questo è quanto, non serve altro per implementare un redirect alla pagina precedente in php, troppo semplice per essere vero, infatti bisogna stare attenti con l'uso di HTTP_REFERER, ci sono delle problematiche da conoscere.
Il valore di HTTP_REFERER non è sempre settato, dipende dallo user agent (il browser) che interroga il web server, alcuni browser possono essere configurati per non passare il valore di HTTP_REFERER o eventualmente modificarlo, pertanto l'uso di HTTP_REFERER per implementare il redirect non è sempre affidabile al 100%, potrebbe capitarvi che inspiegabilmente HTTP_REFERER non funzioni, ricevendo la seguente notifica dall'interprete php:
Notice: Undefined index: HTTP_REFERER in nomefile.php
Invece la spiegazione c'è, e noi sappiamo quale, HTTP_REFERER non è settata, quindi il suo valore non esiste.
N.B. Abbiamo detto che il valore di HTTP_REFERER può non essere settato, e questo dipende dal browser e/o dalla sua configurazione, in altro modo alcuni programmi esterni possono intervenire sul browser e modificarne il valore, ma soprattutto è importante sapere che indipendentemente da tutto ciò, se digitate la URL direttamente nell'indirizzo web la HTTP_REFERER non verrà impostata indipendentemente dalla configurazione del browser o meno e risulterà pertanto nulla.
Quindi, se decidiamo di usare la HTTP_REFERER per fare un torna indietro o un torna alla pagina precedente in php, dobbiamo quanto meno verificare che sia settata correttamente, in questo modo:
<?php
if(isset($_SERVER['HTTP_REFERER']))
echo $_SERVER['HTTP_REFERER'];
?>
Con isset controlliamo che la super variabile globale $_SERVER['HTTP_REFERER'] sia settata correttamente.
Concludiamo dicendo che si può usare HTTP_REFERER per un redirect in php, in molti casì funzionerà correttamente, ma non è affidabile al 100%, e sebbene io prediliga quasi sempre le soluzioni lato server, in questo caso sarebbe meglio affidarsi alle history API Javascript, o quanto meno effettuare sempre un controllo sul valore di HTTP_REFERER ed optare per una soluzione ibrida, scrivendo in questo modo:
<?php
if(isset($_SERVER['HTTP_REFERER']))
header('Location: ' . $_SERVER['HTTP_REFERER']);
else
header("location:javascript://history.back()");
?>
Se qualcuno ha ancora problemi con HTTP_REFERER che non funziona, oppure volesse aggiungere qualcosa o porre ulteriori domande su come implementare un redirect alla pagina precedente in php, può farlo tramite lo spazio dei commenti, ogni vostro intervento sarà gradito e contribuirà ad accrescere la discussione.