Domanda

Alcune delle pagine Web sono effettivamente contenute nel mio database. Ho l'Htaccess con quanto segue

ErrorDocument 404 /error404.php

Il mio errore404 fai a require("checkdb.php");Quale controllo se il nome file è rappresentato in MySQL DB. In tal caso, voglio restituire 200 ok e sputare il contenuto. In caso contrario, voglio sputare quel 404

Il mio problema è che sono bloccato con 404. Sebbene la mia pagina sia correttamente visualizzata, non verrà raccolta dal motore di ricerca e Google+ non funziona, fa un controllo per la pagina e ottiene 404.

ho aggiunto

header('HTTP/1.1 200 OK'); 

subito dopo un controllo nel database (nessun codice HTML è stato ancora visualizzato), ma ottengo il

Avvertimento. Impossibile modificare le informazioni sull'intestazione - Intestazioni già inviate da ....

Anche se lo muovo header() Proprio all'inizio di /error404.php Ricevo ancora quell'errore. Sembra che Apache restituirà prima quel 404 e poi chiama /error404.php

Cosa posso fare per risolvere correttamente questo? Grazie mille in anticipo!

È stato utile?

Soluzione

Quando Apache invia il documento specificato da ErrorDocument, non lo sta servendo come una pagina normale e ha già inviato le intestazioni 404. Invece di usare il ErrorDocument Direttiva In Apache, dovresti invece utilizzare il tuo script PHP per verificare prima se il documento esiste e, in caso contrario, visualizzarlo. Se non esiste, PHP invia l'intestazione di errore 404 stessa.

Di seguito non si svolgono in errore404.php, ma piuttosto in uno script normale come 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();

E rimuovere il ErrorDocument Direttiva dalla configurazione Apache.

Altri suggerimenti

La linea di intestazione deve essere prima qualunque produzione. Senza un po 'di codice, non è possibile sottolineare da dove proviene l'output.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top