Redirecciones y movimientos correctos para navegadores y buscadores en PHP.

Hay veces que hemos de indicar al navegador que cargue otra página. Esto puede ser porque hemos movido el contenido o porque hemos hecho una acción y queremos redirigir a otra página. Para esto se usan algunos códigos 300 del estándard HTTP:

300 multiple choices (ejemplo: multiples lenguajes)
301 moved permanently
302 found (ejemplo: temporary redirect)
303 (HTTP 1.1) see other (ejemplo: resultados de CGIs)
307 (HTTP 1.1) temporary redirect



Casos que hemos movido un contenido


En estos casos hemos de indicar al navegador y a los buscadores que el contenido es el mismo, pero está movido para siempre. En el caso de los navegadores da igual, puesto que cualquier motivo que le demos hará lo mismo, cambiará a la nueva dirección. Pero en el caso de los buscadores es recomendable indicar correctamente el motivo para que actualicen el índice y nos mantengan la valoración de la página. En caso de un movimiento, en PHP se haría de la siguiente manera:

Header("HTTP/1.1 301 Moved Permanently");
Header("Location: http://NUEVA_URL");
exit;

Esto se ha de hacer lo mas pronto posible, y siempre sin haber enviado ningún contenido previo. Con el comando exit nos aseguramos que se envíen las cabeceras. Se puede enviar algún mensaje, por si acaso el navegador no acepta redirecciones (raro), justo antes del comando exit.



Casos que redireccionamos tras una acción


En estos casos hemos de indicar al navegador y a los buscadores que nos movemos a otra página donde estará el resultado, pero no que el contenido ha cambiado permanentemente. Si queremos repetir la acción será necesario volver a la página, no basta con ir a la de resultados. En caso de un resultado, en PHP se haría de la siguiente manera:

Header("HTTP/1.1 302 Moved temporally");
Header("Location: http://NUEVA_URL");
exit;

Esto se ha de hacer lo mas pronto posible, y siempre sin haber enviado ningún contenido previo. Con el comando exit nos aseguramos que se envíen las cabeceras. Se puede enviar algún mensaje, por si acaso el navegador no acepta redirecciones (raro), justo antes del comando exit.

Se deberían usar los comandos "303 (HTTP 1.1) see other" y "307 (HTTP 1.1) temporary redirect", pero por compatibilidad se usa habitualmente el 302, que es genérico.




Con esto tendremos nuestras redirecciones hechas de forma automática y sin problemas en navegadores ni buscadores.



Mas información y técnicas en la wikipedia.



Edit: La mierda del editor se come el inicio de PHP.... Pues lo igualo y lo dejo sin el final...



    Editado por Daniel el 26/01/2009 a las 08:52:08h.