Pregunta

Algunas de las páginas web están realmente contenidas en mi base de datos. Tengo el htaccess con lo siguiente

ErrorDocument 404 /error404.php

Mi error404 haz un require("checkdb.php");que verifique si el nombre de archivo está representado en MySQL DB. Si es así, quiero devolver 200 OK y escupir el contenido. Si no, quiero escupir ese 404

Mi problema es que estoy atascado con 404. Si bien mi página se muestra correctamente, no será recogido por el motor de búsqueda y Google+ no funciona, lo que hace un cheque para la página y obtiene 404.

he añadido

header('HTTP/1.1 200 OK'); 

Justo después de un cheque en la base de datos (todavía no se ha mostrado código HTML), pero obtengo el

Advertencia. No se puede modificar la información del encabezado: encabezados ya enviados por ...

Incluso si muevo eso header() justo al comienzo de /error404.php Todavía recibo ese error. Parece que Apache devolverá ese 404 primero y luego llamará /error404.php

¿Qué puedo hacer para solucionarlo correctamente? ¡Muchas gracias de antemano!

¿Fue útil?

Solución

Cuando Apache envía el documento especificado por ErrorDocument, no lo está sirviendo como una página normal, y ya ha enviado los 404 encabezados. En lugar de usar el ErrorDocument Directiva en Apache, en su lugar debe usar su script PHP para verificar primero si el documento existe, y si lo hace, mostrarlo. Si no existe, entonces PHP envía el encabezado de error 404 en sí.

Lo siguiente no tiene lugar en Error404.php, sino en un script normal como index.php:

// Do whatever you're doing to check
require("checkdb.php");

// If the check fails, PHP sends the 404:
header("HTTP/1.0 404 Not Found");
// Then display your custom error document with PHP
// You can display the other contents of error404.php
echo "Oops, page wasn't found!";
exit();

Y retire el ErrorDocument Directiva desde su configuración de Apache.

Otros consejos

La línea de encabezado debe ser antes ningún producción. Sin algún código, no hay forma de que podamos señalar de dónde viene la salida.

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