Cómo redireccionar usando PHP (de forma segura)

Redireccionar usando PHP es una herramienta increíblemente útil, pero también puede ser peligrosa si no se implementa correctamente.

Si has leído nuestra introducción (en inglés) a PHP 7.4 y nuestra guía sobre cómo crear un sitio web, sabrás que la función de encabezado ( header() ) se puede utilizar para redirigir fácilmente a un usuario a otra página. Sin embargo, en realidad, usar esta función no es tan simple como parece.

En esta guía, te mostraremos cómo redireccionar usando PHP sin causar grandes problemas a largo plazo.

El método básico para un redireccionamiento PHP

La mayoría de las guías te dirán que para redireccionar usando PHP puedes usar la función header () en la parte superior de tus páginas. Para hacerlo, usa la función para enviar una nueva URL, así:

header('Location: '.$nuevaURL.php);

Esta función de encabezado debe colocarse antes de pasar cualquier HTML o texto a los navegadores de los usuarios, por lo que debe estar justo en la parte superior de la página. Eso significa que debe aparecer antes de la declaración <!DOCTYPE>, antes de cualquier Java y antes de cualquier código PHP. Así enviará a los usuarios a la nueva URL.

Si bien puede parecer simple, cuando se trata de la función header (), la simplicidad del código puede llevar a los desarrolladores a una falsa sensación de seguridad. Así que veamos cómo puedes usar esta función correctamente.

Die () y Exit ()

Primero, debes usar el modificador die () o exit () cada vez que uses una redirección. En resumen, el problema es que los rastreadores y los robots pueden ignorar los encabezados, por lo que la página desde la que pensabas que estabas redirigiendo es totalmente accesible para ellos. Si, en otras palabras, utilizar un redireccionamiento de encabezado para proteger una página en particular, no te ofrece ninguna protección.

Es por eso que debes cerrar la redirección si esta es ignorada. La forma de hacerlo es agregar die () o exit () después de tu redirección:

header("Location: .$nuevaURL.php");
die();

URLs relativas y absolutas

Ahora bien, hablemos sobre las URL relativas y absolutas en los redireccionamientos. RFC 7231 te permite usar ambas, pero debes tener mucho cuidado al usar redireccionamientos relativos. Esto se debe a que algunos creadores de sitios web clasifican y cambian el nombre de las páginas PHP. Lo que significa que si estás trabajando en tu PHP a través de un creador de sitios web, puedes terminar haciendo que todos tus redireccionamientos fallen.

Desafortunadamente, en este momento no hay una forma real de evitar este problema, salvo tener una visión general cuidadosa de hacia dónde apuntan tus redirecciones.

Códigos de estado

El tercer problema con redireccionar usando PHP estándar es que el operador de «ubicación» de PHP aún devuelve el código HTTP 302. No debes permitir que haga eso, porque muchos navegadores web implementan este código de una manera que está totalmente en desacuerdo con la forma en que se supone que funciona: esencialmente usan el comando GET en lugar de realizar una redirección «real».

Por lo tanto, la mejor práctica al crear redirecciones PHP es especificar el código a devolver. Desafortunadamente, el código correcto para usar es un punto de discusión. HTTP 301 indica una redirección permanente, lo que puede causar problemas para restaurar tu página original. Y, muchos navegadores entienden que HTTP 303 es «otro» y puede causar problemas al indexar tu página a través de motores de búsqueda.

En la práctica, y hasta que se resuelva esta situación, recomendamos que uses HTTP 303.

Verifica la documentación

Además de tomar las precauciones básicas anteriores, debes tomarte un tiempo para leer la documentación sobre el uso de redireccionamientos de PHP antes de publicarlos. Deberías consultar el manual de PHP para asegurarte de que comprendes lo que estás haciendo, así como la documentación del W3C para asegurarte de que sigues las mejores prácticas.

Y mientras te pones al día con esta lectura, asegúrate de proteger también tu sitio web de vulnerabilidades comunes: si ya estás en la posición de tener que usar redireccionamientos PHP, es probable que la seguridad de tu sitio necesite una auditoría.

Lista de vulnerabilidades de red de Privacy Canada

Otros métodos

Dados todos estos problemas, probablemente te estés preguntando por qué deberías redireccionar usando PHP. Esa es una buena pregunta. Aunque los redireccionamientos de PHP generalmente se ejecutan más rápidamente que otros tipos de redireccionamiento y, por lo tanto, pueden ser una herramienta importante para mejorar la velocidad del sitio web, existen otras opciones disponibles.

Hay dos enfoques principales para hacer esto. Puedes usar el elemento HTML <meta> para redirigir desde la parte HTML de tu página, o usar JavaScript. El primer enfoque (usar <meta>) se vería así:

<meta http-equiv="refresh" content="0;url=newpage.php">

El segundo enfoque (usar JavaScript) es un poco más elegante y ciertamente se ve más profesional:

window.location.replace("http://nuevapagina.php/");

Ambos enfoques se ejecutarán un poco más lento que una redirección header () inmediata, pero posiblemente sean más flexibles.

Conclusión

Si bien al seguir los pasos anteriores deberías poder redireccionar usando PHP de forma segura, si estás en posición de utilizar múltiples redireccionamientos PHP, probablemente sea hora de repensar la estructura de tu sitio.

Hay un par de buenas razones para hacerlo. La primera es que no todos los servidores web se crean de la misma manera, y si envías a todos tus visitantes en una ruta tortuosa alrededor de tu sitio, afectará su rendimiento. Esto puede mejorarse hasta cierto punto utilizando un proveedor de alojamiento web asequible, pero solo hasta cierto punto.

La segunda razón es que la página desde la que estás redirigiendo podría estar recopilando datos sobre tus visitantes sin que lo sepas, particularmente si estás utilizando un software de análisis web para rastrear el rendimiento de tu sitio. En nuestro mundo post-GDPR, eso podría tener consecuencias significativas.

En resumen, ten cuidado con los redireccionamientos de PHP, úsalos correctamente y úsalos donde y cuando sea absolutamente necesario.

Author
El autor

Deyimar A.

Deyi es una entusiasta del marketing digital, con experiencia en diseño de páginas web, creación de contenido, copywrite y SEO. Forma parte del equipo de SEO & Localization de Hostinger. En su tiempo libre, le gusta desarrollar proyectos, leer un libro o ver una buena película.