Vous pouvez simplement copier les documents d'erreur d'Apache dans votre root web (ou faire un lien symbolique) et utiliser header()
pour définir les codes d'erreur et avec ces documents comme sortie. C'est probablement la meilleure solution, sauf si vous avez une raison impérieuse de ne pas le faire. Mais au cas où cela ne fonctionnerait pas pour vous, il existe des alternatives (bien que peu pratiques).
Pour 500, il suffit de mettre un bug dans votre code.
<?php throw new Exception('Nooooooooooooooo!'); ?>
Le script PHP script lève une exception, ce qui donne lieu à une page d'erreur Apache 500 normale. (Mais attention, cela n'entraînera une erreur Apache que si le paramètre d'init PHP display_errors
est réglé sur 0
. Dans la plupart des configurations de développement, ce n'est pas le cas. Dans la plupart des configurations de production, c'est le cas. Si vous ne connaissez pas les paramètres de votre serveur de production, vous devrez simplement tester ceci pour voir si cela fonctionne).
Pour les 404, je pense que le mieux que vous puissiez faire est de rediriger vers une page inexistante. Ce n'est pas exactement la même chose, mais cela pourrait convenir à vos besoins.
<?php header("Location: /i-dont-think-therefore-i-am-not"); ?>
Dans la plupart des navigateurs, les utilisateurs ne verront pas réellement la redirection, ils seront simplement redirigés silencieusement et rapidement vers une page inexistante, ce qui entraînera une erreur Apache 404 normale. Bien sûr, l'url aura changé et certains utilisateurs pourraient le remarquer. Si cela n'est pas acceptable, vous pouvez peut-être obtenir des résultats similaires en utilisant Apache mod_rewrite pour réécrire le backend url vers un emplacement inexistant.
Pour répondre à plusieurs commentaires : Définir le code de réponse via header()
(ou d'une autre manière) ne donnera pas lieu au document d'erreur standard d'Apache. Il retournera simplement ce code de réponse avec votre propre sortie. Il s'agit d'un comportement intentionnel, conçu pour vous permettre d'avoir des documents d'erreur personnalisés, ou de définir des codes de réponse comme le stipulent les spécifications HTTP pour toute requête. Si vous voulez que le Apache vous devez soit les falsifier (comme je l'ai suggéré au départ en copiant simplement les documents d'erreur sur votre racine web), soit inciter Apache à les renvoyer (comme je l'ai suggéré par la suite).