Con il linguaggio PHP è possibile creare dei redirect a siti esterni o interni al vostro attraverso l'uso della funzione header().
Per redirect si intende un reindirizzamento ad un altro URL, interno o esterno al vostro sito. In questo modo si può creare un collegamento esterno, direttamente usando il linguaggio PHP, senza far apparire a video nessuna pagina HTML del nostro sito.
Il Redirect serve quindi per inviare "header http" e cioè redirezionare il visitatore su un'altra pagina web.
"Location" non trasmette solo un header al browser, ma anche un REDIRECT con codice di stato (302).
Vediamo un esempio pratico; di seguito è riportato il codice e l'esempio per il reindirizzamento di pagina in base a quale link viene cliccato dal visitatore; se si clicca il primo link si accede al sito di Google, mentre sul secondo su HTML.it.
| HTML.it | |
|
<?php if($_GET["url"]=="google") header("Location: http://www.google.it"); else header("Location: http://www.html.it"); ?> |
|
Come potete vedere entrambi i links non puntano direttamente ai corrispondenti siti web, ma al file header.php, di cui è riportato sopra il codice. Affinchè questo possa funzionare, bisogna accodare ad ogni link la coppia url=valore (detta anche "query string").
Le funzioni header non richiedono nessuna uscita prima della loro esecuzione. In pratica se scrivete anche un solo echo"......"; la pagina con il redirect genera un errore (almeno nella versione PHP 4.3).
Oltre a questo, se prima del redirect avete posizionato un collegamento errato con il database senza la segnalazione di errore, riceverete a video solo l'errore del redirect, mentre in realtà l'errore è da un'altra parte.
In caso di errore il consiglio è di togliere il redirect e testare tutto lo script che lo precede, successivamente reinserite la riga header e riprovate.
Spesso viene accodata all'istruzione header, la funzione exit(), che blocca il programma senza leggere le funzioni ed il codice sottostante.
| <? .... // Eventuali istruzioni eseguite (tipo applicazioni su database) header("location: http://...."); exit; ....// Altre istruzioni che non sono mai eseguite ?> |