Je sais que vous pouvez envoyer un en-tête qui indique au navigateur que cette page est interdite, par exemple:
header('HTTP/1.0 403 Forbidden');
Mais comment puis-je également afficher la page d'erreur personnalisée créée sur le serveur pour ce type d'erreur?
Par défaut, le simple envoi de l'en-tête affiche une page blanche, mais je me souviens de la lecture précédente que vous pouvez utiliser la page d'erreur du client. Est-ce que quelqu'un sait?
Incluez la page d'erreur personnalisée après avoir modifié l'en-tête.
Répondez simplement à votre contenu après l'envoi de l'en-tête.
header('HTTP/1.0 403 Forbidden');
echo 'You are forbidden!';
http_response_code a été introduit dans PHP 5.4 et a rendu les choses beaucoup plus faciles!
http_response_code(403);
die('Forbidden');
Pour cela, vous devez d’abord dire au navigateur que l’utilisateur reçoit une erreur 403. Pour cela, vous pouvez utiliser ce code:
header("HTTP/1.1 403 Forbidden" );
Ensuite, le script envoie "erreur, erreur, erreur, erreur, erreur ...", vous devez donc l'arrêter. Vous pouvez utiliser
exit;
Avec ces deux lignes, le serveur envoie une erreur et arrête le script.
N'oubliez pas: cela imite l'erreur, mais vous devez la définir dans un fichier .htaccess, avec
ErrorDocument 403 /error403.php
Vu beaucoup de réponses, mais la bonne est de fournir toutes les options pour l'appel de fonction en-tête selon le manuel php
void header ( string $string [, bool $replace = true [, int $http_response_code ]] )
Si vous invoquez avec
header('HTTP/1.0 403 Forbidden', true, 403);
le comportement normal de HTTP 403 tel que configuré avec Apache ou tout autre serveur suivrait.
.htaccess
ErrorDocument 403 /403.html
J'ai lu toutes les réponses ici et aucune d'entre elles n'était complète pour ma situation (ce qui est exactement la même chose dans cette question), alors voici comment j'ai rassemblé certaines parties des réponses suggérées et trouver la solution exacte:
echo ce code ci-dessous avant toute sortie HTML ou en-tête! (Même un espace fera que PHP enverra un en-tête HTTP HTML/TEXT et que cela ne fonctionnera pas) Le code ci-dessous devrait être votre première ligne !
<?php header('HTTP/1.0 403 Forbidden');
$contents = file_get_contents('/home/your_account/public_html/domain.com/403.html', TRUE);
exit($contents);
Maintenant vous avez la solution exacte. J'ai vérifié et vérifié avec CPANEL Derniers visiteurs et il est enregistré comme événement exact 403.
Pour minimiser les tâches du serveur, simplifiez les choses:
. htaccess
ErrorDocument 403 "Forbidden"
PHP
header('HTTP/1.0 403 Forbidden');
die(); // or your message: die('Forbidden');
Utilisez ModRewrite:
RewriteRule ^403.html$ - [F]
Assurez-vous simplement de créer un document vierge appelé "403.html" dans votre racine www ou vous obtiendrez une erreur 404 au lieu de 403.
Je comprends que vous avez un scénario avec ErrorDocument déjà défini dans votre conf. Apache ou .htaccess et que vous souhaitez que ces pages apparaissent lors de l’envoi manuel d’un code de statut 4xx via php.
Malheureusement, cela n'est pas possible avec les méthodes courantes car php envoie l'en-tête directement au navigateur de l'utilisateur (pas au serveur Web Apache) alors qu'ErrorDocument est un gestionnaire d'affichage pour le statut http généré à partir d'Apache.