2010-09-11 4 views
0

J'utilise .htaccess RewriteRules pour transmettre l'URL à index.php. Si le nom de la page spécifié n'est pas trouvé dans la base de données, je veux que mon script lance les réponses 404 appropriées.En-tête de réponse PHP 404

La façon dont je l'ai essayé d'y parvenir est:

header($_SERVER["SERVER_PROTOCOL"] . " 404 Not Found"); 

Analyse des réponses HTTP dans mon navigateur, la réponse revient bien:

HTTP/1.1 404 Not Found 

Cependant, je voudrais pouvoir pour sortir une page amicale 404, mais tout ce qui se passe après la fonction header() n'est pas pris en compte, et quoi que ce soit avant ... eh bien ... ce serait stupide.

Quelqu'un peut-il suggérer comment générer un message d'erreur 404 à partir du script?

Merci.

+1

D'après mon expérience, cette méthode fonctionne. – Mewp

Répondre

3

Vous devez vous assurer que la sortie (ou ErrorDocument) est supérieure à 512 octets que pour vous assurer que Internet Explorer ne l'affiche pas sa propre page d'erreur. C'est probablement pourquoi vous avez expérimenté une sortie après que l'en-tête ne soit pas affiché. Pourquoi ne pas simplement afficher la page d'erreur amicale après l'entête(), en utilisant echo par exemple?

0

Ainsi suivante (en .htaccess)

ErrorDocument 404 /errordoc.html 

ne fonctionne pas pour vous? Comme vous le voyez, vous pouvez facilement lancer 404 en PHP, puis l'attraper en .htaccess.

1
<?php 
header("HTTP/1.0 404 Not Found"); 
    echo "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\"> 
<html><head> 
<title>404 Not Found</title> 
</head><body> 
<h1>Not Found</h1> 
<p>The requested URL " . $_SERVER['REQUEST_URI'] . " was not found on this server.</p> 
<hr> 
<address>Apache/2.2.3 (CentOS) Server at " . $_SERVER['SERVER_NAME'] . " Port 80</address> 
</body></html>"; 
    exit(); 
?>