Pregunta

Actualmente en mis scripts PHP, redirijo al usuario a una página de error 404 no encontrada personalizada cuando intenta acceder a contenido que no existe o que no pertenece a ese usuario. Al igual que:

header('Location: http://www.mydomain.com/error/notfound/');
exit;

Me doy cuenta de que la llamada al encabezado anterior () envía un código de estado de redireccionamiento 302 de forma predeterminada.

Sin embargo, lo que no entiendo es cuándo debo enviar el código de estado 404 no encontrado. ¿Antes de redirigir al usuario? ¿O cuando muestro la página / error / notfound / ?

¡Gracias por tu ayuda!

¿Fue útil?

Solución

Deberías hacer algo como esto:

header("HTTP/1.0 404 Not Found");
include 'error.php';
die();

Otros consejos

No ejecuta errores 404 como redireccionamiento en absoluto.

Lo que realmente quieres hacer es enviar el encabezado de estado 404 y luego reemplazar la salida actual con el cuerpo de una página 404.

Hay varias formas de hacer esto y depende bastante de cómo esté estructurado su sitio. Las aplicaciones MVC suelen entregar esto con un avance. He visto otros sistemas que lanzan una Excepción y luego el controlador de excepciones registrado se encarga de mostrar la página 404.

En cualquier caso, los pasos aproximados son

  1. Determinar que el contenido no es válido
  2. Salir de la ejecución actual
  3. Borra cualquier salida, si hubiera alguna.
  4. Enviar el encabezado de estado 404
  5. Enviar el contenido de la página 404

No puedes usar 404 y Location: juntos. La ubicación es válida solo para algunas respuestas (201 y 3xx)

Sin embargo, puede enviar una página HTML personalizada como cuerpo de su respuesta 404.

De php.net:

  

Hay dos llamadas de encabezado de casos especiales. El primero es un encabezado que comienza con la cadena " HTTP / " (el caso no es significativo), que se utilizará para determinar el código de estado HTTP para enviar. Por ejemplo, si ha configurado Apache para usar un script PHP para manejar las solicitudes de archivos faltantes (utilizando la directiva ErrorDocument), puede asegurarse de que su script genere el código de estado adecuado.

<?php
header("HTTP/1.0 404 Not Found");
?>

http://us.php.net/manual/en/function .header.php

Debe enviar un código de estado HTTP 404. Los navegadores y los rastreadores entienden esto. También puede incluir una página de error más amigable que explique lo que sucedió, incluido un formulario para buscar en su sitio, enlaces de Soundex, etc.

Una " redirección " y un " no encontrado " son conceptos diferentes.

¿Qué archivo se puede encontrar?
http://www.mydomain.com/error/notfound/
o
http://www.mydomain.com/not_exist.html

El " http://www.mydomain.com/not_exist.html " ; la página debe tener un encabezado 404 Y la " Página no encontrada " contenidos.

Una solución rápida podría ser:

header("HTTP/1.0 404 Not Found");
readfile('http://www.mydomain.com/error/notfound/');
exit;

Pero esto requiere 2 solicitudes de apache y es un poco desagradable.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top