Ves al contingut principal

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ó POST continua sent POST a 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.cat a www.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 (.htaccess en 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) o 302 (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çant meta refresh com a solució alternativa.

  • Pèrdua de dades $_POST: Per defecte, un redireccionament amb header('Location: ...') converteix una petició POST en una petició GET, de manera que les dades enviades per un formulari POST es perden.