Come fare un redirect con Php

Il linguaggio Php consente di realizzare un redirect automatico da una pagina web a un'altra tramite l'istruzione Header.

Un esempio pratico di reindirizzamento

Nel seguente script ho usato l'istruzione Header per reindirizzare automaticamente l'utente verso la pagina /webmarketing.

<?
header("location: /webmarketing");
?>

Quando l'utente visita la pagina in questione, il browser viene reindirizzato verso la pagina che ho indicato nel comando.

A cosa serve?

Questa istruzione è utile per spostare l'utente da una pagina non più esistente verso una nuova. E' molto utile quando si cancella un documento perché evita il rischio di creare dei link interrotti ( broken link ) nel sito web.

Come fare un redirect automatico verso un sito web esterno

Nell'esempio precedente ho creato un reindirizzamento verso un un'altra pagina interna dello stesso sito web. Ho infatti usato come Url di destinazione un indirizzo relativo.

Cos'è un indirizzo Url relativo. In un indirizzo relativo non è indicato il nome di dominio ove si trova la pagina. A volte non è indicata nemmeno la cartella interna. In questi casi il browser prende come dominio e cartella di default quella corrente sul browser. Ad esempio, il redirect verso la pagina /php presuppone che la pagina si trovi nel dominio www.andreaminini.com.

Per ottenere un reindirizzamento automatico verso una pagina web esterna, residente in un altro sito web, devo semplicemente inserire l'indirizzo assoluto della pagina come Url di destinazione.

<?
header("location: http://www.okpedia.it/seo");
?>

In questo caso, il browser ha tutte le informazioni necessarie e non usa quelle di default. Ha il nome di dominio ( www.okpedia.it ), il percorso interno nelle cartelle ( path ) e il nome della pagina web a cui reindirizzare ( seo ).

Dove inserire il comando Header nella pagina web

Lo script che contiene l'istruzione Header deve essere inserito prima di inviare a video qualsiasi altra informazione. In caso contrario, l'istruzione restituisce un messaggio di errore.

Ad esempio, il seguente codice è errato perché visualizza un messaggio testuale sullo schermo dell'utente prima del reindirizzamento.

<?
echo("ti sto reindirizzando su un'altra pagina");
header("location: /webmarketing");
?>

Allo stesso modo, è errato inserire lo script dopo la pubblicazione del tag <HTML> della pagina web o di qualsiasi altra informazione testuale.

<HTML>
<?

header("location: /webmarketing");
?>

E' invece corretto scrivere

<?
header("location: /webmarketing");
?>
<HTML>

Inserire un messaggio di stato

E' consigliabile anteporre al redirect un'istruzione per comunicare il cambio di stato agli spider dei search engine. Questa informazione mi permette di comunicare al motore di ricerca quello che sto facendo.

<?
header( "HTTP/1.1 301 Moved Permanently" );
header("location: /webmarketing");
?>

Ad esempio, nel precedente codice ho usato il messaggio di stato HTTP 301 per avvisare il search engine che si tratta di un trasferimento permanente della risorsa dal vecchio indirizzo Url al nuovo.

In questo modo, trasferisco il ranking della pagina web dal vecchio indirizzo al nuovo senza dover ricominciare daccapo.

Nota. I messaggi di stato non sono pubblicati sullo schermo dell'utente e non causano alcun errore anche se anticipano il reindirizzamento. Si tratta di messaggi inviati tramite il protocollo HTTP. Sono ricevuti e letti soltanto di browser e dagli spidr ( crawler ) dei motori di ricerca.

Interrompere lo script dopo il redirect

E' buona norma inserire l'istruzione Exit subito dopo l'istruzione Header per evitare la prosecuzione dello script.

<?
header("location: /webmarketing");

exit;
?>

L'istruzione Exit interrompe l'esecuzione dello script subito dopo il redirect.

Perché è meglio usare l'istruzione Exit?

E' inutile eseguire il resto dello script o continuare a caricare il documento Html se si sta reindirizzando l'utente verso un'altra pagina. Sarebbe un inutile spreco di risorse del server e della banda internet.



Per scrivere un commento

knowledge base

Il linguaggio Php

FAQ