100 votes

Pourquoi mon application PHP n'envoie-t-elle pas une erreur 404 ?

if (strstr($_SERVER['REQUEST_URI'],'index.php')) {
    header('HTTP/1.0 404 Not Found');
}

Pourquoi cela ne fonctionne-t-il pas ? J'obtiens une page blanche.

247voto

Alan Storm Points 82442

Votre code est techniquement correct. Si vous regardiez les en-têtes de cette page blanche, vous verriez un en-tête 404, et d'autres ordinateurs/programmes seraient capables d'identifier correctement la réponse comme étant un fichier non trouvé.

Bien sûr, vos utilisateurs sont toujours SOL. Normalement, les 404s sont gérés par le serveur web.

  • Utilisateur : Hé, vous avez quelque chose pour moi sur ce serveur web URI ?
  • Serveur web : Non, pas du tout, 404 ! Voici une page à afficher pour les 404.

Le problème est qu'une fois que le serveur web commence à traiter la page PHP, il a déjà dépassé le point où il traiterait un 404

  • Utilisateur : Hé, vous avez quelque chose pour moi sur ce serveur web URI ?
  • Serveur web : Oui, je le fais, c'est une page PHP. Il vous dira quel est le code de réponse.
  • PHP : Hé, OMG 404 !!!!!!!
  • Serveur web : Merde, les gens de la page 404 sont déjà partis, donc je vais juste envoyer ce que PHP m'a donné.

En plus de fournir un en-tête 404, PHP est maintenant responsable de l'affichage de la page 404.

69voto

Bob Fanger Points 9547

C'est un comportement correct c'est à vous de créer le contenu de la page 404.
L'en-tête 404 est utilisé par les robots et les gestionnaires de téléchargement pour déterminer si le fichier existe.
(Une page avec un en-tête 404 ne sera pas indexée par Google ou d'autres moteurs de recherche).

Les utilisateurs normaux ne regardent pas les en-têtes http et utilisent la page comme une page normale.

60voto

Evan Fosmark Points 17732
if (strstr($_SERVER['REQUEST_URI'],'index.php')){
    header('HTTP/1.0 404 Not Found');
    echo "<h1>404 Not Found</h1>";
    echo "The page that you have requested could not be found.";
    exit();
}

Si vous regardez les deux dernières lignes d'écho, c'est là que vous verrez le contenu. Vous pouvez le personnaliser comme vous le souhaitez.

12voto

GRIGORE-TURBODISEL Points 4415

Pour mémoire, c'est le manipulateur de tous les cas :

<?php
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
header("Status: 404 Not Found");

$_SERVER['REDIRECT_STATUS'] = 404;
?> <!-- 404 contents below this line -->

10voto

Kitet Points 101

Chargement de la page 404 du serveur par défaut, si vous en avez une, par exemple définie pour apache :

if(strstr($_SERVER['REQUEST_URI'],'index.php')){
  header('HTTP/1.0 404 Not Found');
  readfile('404missing.html');
  exit();
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X