web-dev-qa-db-fra.com

Comment créer une erreur 404 en PHP?

Mon .htaccess redirige toutes les demandes de /Word_here vers /page.php?name=Word_here. Le script PHP vérifie ensuite si la page demandée se trouve dans son tableau de pages.

Sinon, comment puis-je simuler une erreur 404? Je l'ai essayée, mais ma page 404 n'a pas été configurée via ErrorDocument dans le .htaccess.

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

Ai-je raison de penser qu'il est erroné de rediriger vers ma page d'erreur 404?

80
Eric

La réponse à jour (à partir de PHP 5.4 ou plus récent) pour générer 404 pages consiste à utiliser http_response_code :

<?php
http_response_code(404);
include('my_404.php'); // provide your own HTML for the error page
die();

die() n'est pas strictement nécessaire, mais il garantit que vous ne poursuivez pas l'exécution normale.

97
blade

Ce que vous ferez fonctionnera, et le navigateur recevra un code 404. Ce que ne veut pas faire, c’est d’afficher la page "introuvable" à laquelle vous pourriez vous attendre, par exemple:

Pas trouvé

L'URL demandée /test.php est introuvable sur ce serveur.

En effet, le serveur Web n'envoie pas cette page lorsque PHP renvoie un code 404 (du moins Apache). PHP est responsable de l'envoi de ses propres sorties. Donc, si vous voulez une page similaire, vous devrez envoyer le code HTML vous-même, par exemple:

<?php
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found", true, 404);
include("notFound.php");
?>

Vous pouvez configurer Apache pour utiliser la même page pour ses propres messages 404, en mettant ceci dans httpd.conf:

ErrorDocument 404 /notFound.php
77
JW.

Essaye ça:

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

Créer des pages d'erreur personnalisées via le fichier .htaccess

1. 404 - page non trouvée

 RewriteEngine On
 ErrorDocument 404 /404.html

2. 500 - Erreur serveur interne

RewriteEngine On
ErrorDocument 500 /500.html

3. 403 - Interdit

RewriteEngine On
ErrorDocument 403 /403.html

4. 400 - Mauvaise demande

RewriteEngine On
ErrorDocument 400 /400.html

5. 401 - Autorisation requise

RewriteEngine On
ErrorDocument 401 /401.html

Vous pouvez également rediriger toutes les erreurs sur une seule page. comme

RewriteEngine On
ErrorDocument 404 /404.html
ErrorDocument 500 /404.html
ErrorDocument 403 /404.html
ErrorDocument 400 /404.html
ErrorDocument 401 /401.html
6
Irshad Khan

Vous êtes-vous souvenu de mourir () après l'envoi de l'en-tête? L'en-tête 404 n'interrompt pas automatiquement le traitement. Il peut donc sembler que rien n'a été fait si d'autres traitements sont en cours.

REDIRECTION de votre page 404 n’est pas bon, mais vous pouvez INCLURE le contenu de celle-ci sans problème. De cette façon, vous avez une page qui envoie correctement un statut 404 à partir de l'URL correcte, mais elle a également votre "Qu'est-ce que vous cherchez?" page pour le lecteur humain.

3
Eli

essayez de mettre 

ErrorDocument 404 /(root directory)/(error file) 

dans le fichier .htaccess.

Faites cela pour toute erreur, mais remplacez 404 par votre erreur.

0

Dans Wordpress, si vous essayez de faire en sorte que du code php personnalisé semble ne pas exister (à moins qu'une condition ne soit remplie), les opérations suivantes fonctionnent bien en faisant en sorte que le gestionnaire standard Wordpress 404 prenne le relais:

<?php
  if(condition){
    do stuff;
  } else {
    include('index.php');
  }
?>
0
Mike Godin