152 votes

Comment créer une page d'erreur 404 en utilisant PHP ?

Mon dossier .htaccess traite toutes les demandes de /word_here à mon point de terminaison interne /page.php?name=word_here . Le script de PHP vérifie ensuite si la page demandée se trouve dans son tableau de pages.

Si non, comment puis-je simuler une erreur 404 ?

J'ai essayé cela, mais cela n'a pas donné lieu à ma page 404 configurée via ErrorDocument dans le .htaccess se montrer.

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

Ai-je raison de penser que c'est mal de rediriger vers ma page d'erreur 404 ?

238voto

81403 Points 154

La solution la plus récente (à partir de PHP 5.4 ou plus récent) pour générer des pages 404 est d'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 elle permet de s'assurer que vous ne continuez pas l'exécution normale.

98voto

JW. Points 17361

Ce que vous faites fonctionnera, et le navigateur recevra un code 404. Ce qu'il ne le fera pas est d'afficher la page "non trouvé" que vous attendez, par exemple :

Non trouvé

L'URL demandée /test.php n'a pas été trouvée sur ce serveur.

C'est parce que le serveur web n'envoie pas cette page lorsque PHP renvoie un code 404 (du moins Apache ne le fait pas). PHP est responsable de l'envoi de tous ses propres messages. Donc si vous voulez une page similaire, vous devrez envoyer le HTML vous-même, par exemple :

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

Vous pouvez configurer Apache de manière à ce qu'il utilise la même page pour ses propres messages 404, en plaçant ceci dans httpd.conf :

ErrorDocument 404 /notFound.php

30voto

Ates Goral Points 47670

Essayez ça :

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

15voto

Irshad Khan Points 31

Créer des pages d'erreur personnalisées grâce au fichier .htaccess

1. 404 - page non trouvée

 RewriteEngine On
 ErrorDocument 404 /404.html

2. 500 - Erreur de 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 vers une seule page, par exemple

RewriteEngine On
ErrorDocument 404 /404.html
ErrorDocument 500 /404.html
ErrorDocument 403 /404.html
ErrorDocument 400 /404.html
ErrorDocument 401 /401.html

5voto

Eli Points 14599

Avez-vous pensé à die() après avoir envoyé l'en-tête ? L'en-tête 404 n'arrête pas automatiquement le traitement, il peut donc sembler n'avoir rien fait si d'autres traitements sont en cours.

Il n'est pas bon de REDIRECTER vers votre page 404, mais vous pouvez INCLURE le contenu de celle-ci sans problème. De cette façon, vous disposez d'une page qui envoie correctement un statut 404 à partir de l'URL correcte, mais aussi d'une page "Que cherchez-vous ?" pour le lecteur humain.

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