HTTP Header
Com funciona?
Un redireccionament HTTP és una instrucció que un servidor web envia a un navegador per indicar-li que la pàgina sol·licitada s'ha mogut a una nova URL. En lloc de carregar la pàgina actual, el navegador l'abandona i navega automàticament a la nova adreça.
El procés de redireccionament es basa en els codis d'estat HTTP. Quan un navegador sol·licita una URL, el servidor respon amb un codi d'estat. Els codis d'estat més comuns per a redireccionaments són:
-
301 (Moved Permanently): Indica que la pàgina s'ha mogut permanentment a una nova ubicació. Aquest tipus de redireccionament és ideal per a SEO, ja que els motors de cerca entenen que la "autoritat" de l'URL original ha de transferir-se a la nova. -
302 (Found): Indica que la pàgina s'ha mogut temporalment. El navegador hauria de continuar utilitzant l'URL original en futures sol·licituds. És útil per a manteniment o testatge. -
307 (Temporary Redirect): Similar al 302, però manté el mètode de la petició original (per exemple, una peticióPOSTcontinua sentPOSTa la nova URL). -
308 (Permanent Redirect): Similar al 301, però també manté el mètode de la petició original.
En rebre un d'aquests codis, el navegador llegeix la capçalera Location: que acompanya la resposta, la qual conté la nova URL de destinació.
Casos d'ús
Els redireccionaments són fonamentals en la gestió de llocs web per diversos motius:
-
Canvis d'URL: Quan una pàgina canvia de nom o de ruta.
-
Consolidació de dominis: Per unificar el trànsit de diferents dominis cap a un de sol (p.ex., de
exemple.catawww.exemple.cat). -
Pàgines esborrades: Per enviar els visitants a una pàgina similar o a la pàgina d'inici quan una pàgina ja no existeix.
-
HTTPS: Per redirigir automàticament tot el trànsit d'HTTP a HTTPS per motius de seguretat.
-
Manteniment: Per redirigir els usuaris a una pàgina de "manteniment" mentre el lloc web està fora de línia temporalment.
Tipus de redireccionaments
A més de la redirecció HTTP clàssica, hi ha altres mètodes:
-
Redireccionament a nivell de servidor (
.htaccess): És el mètode més recomanat per a redireccions permanents. Es configura en un fitxer al servidor (.htaccessen servidors Apache) i és molt eficient. -
Redireccionament amb metaetiqueta (
<meta>): Es realitza afegint una etiqueta<meta http-equiv="refresh" ...>dins l'apartat<head>del HTML. Aquest mètode és menys recomanable per a SEO i pot ser més lent. -
Redireccionament amb JavaScript: Es fa amb
window.location.href = 'nova_url'. Aquest mètode no és visible per als robots de cerca i depèn de si l'usuari té JavaScript activat.
Com fer un redirect amb PHP
Per fer un redireccionament, simplement has de cridar la funció header() amb la capçalera Location.
Cal uitilitzar aquesta funció abans de qualsevol sortida de text, HTML o espai en blanc, ja que les capçaleres HTTP han de ser les primeres dades enviades.
<?php
header('Location: https://www.google.cat');
exit; // És important afegir 'exit' o 'die' per aturar l'execució del script
Cal afegir exit o die, ja que si no ho afegim, el script continuarà executant-se al servidor i podria enviar més contingut HTML, cosa que podria causar més errors o problemes de seguretat. Aquestes funcions asseguren que el script s'atura immediatament despres de la redirecció.
Avantatges i inconvenients
Avantatges
-
Eficiència: És un mètode ràpid i eficient, ja que la redirecció es gestiona completament pel navegador. El servidor només envia la instrucció i tanca la connexió.
-
Seguretat: Quan es fa correctament, evita que el codi sensible s'executi innecessàriament després d'una redirecció.
-
SEO: Permet utilitzar diferents tipus de codis d'estat HTTP, com ara
301 (Moved Permanently)o302 (Found), que tenen un impacte important en el SEO. Per defecte,header('Location: ...')envia un codi 302, que és una redirecció temporal. Per a una redirecció permanent, cal afegir explícitament el codi d'estat:header('Location: https://www.google.cat', true, 301);. .
Inconvenients
-
Problema de sortida de dades (Headers already sent): El principal inconvenient és que no es pot enviar la capçalera si ja s'ha generat alguna sortida. Si un script ja ha produït qualsevol text, espai en blanc, o etiqueta HTML, PHP generarà una advertència
Warning: Cannot modify header information - headers already sent by (...)i la redirecció fallarà. -
Dependència del navegador: La redirecció depèn completament de la capacitat del navegador per interpretar la capçalera HTTP
Location. Si per algun motiu el navegador no la processa, l'usuari no serà redirigit. Per això, a vegades es recomana una redirecció mitjançantmeta refreshcom a solució alternativa. -
Pèrdua de dades
$_POST: Per defecte, un redireccionament ambheader('Location: ...')converteix una peticióPOSTen una peticióGET, de manera que les dades enviades per un formulariPOSTes perden.