web-dev-qa-db-fra.com

Émuler une page d'erreur 403

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?

55
NightHawk

Incluez la page d'erreur personnalisée après avoir modifié l'en-tête.

20
Ibrahim AshShohail

Répondez simplement à votre contenu après l'envoi de l'en-tête.

header('HTTP/1.0 403 Forbidden');

echo 'You are forbidden!';

forbidden

56
alex

http_response_code a été introduit dans PHP 5.4 et a rendu les choses beaucoup plus faciles!

http_response_code(403);
die('Forbidden');
32
Marcio Mazzucato

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
19
Pyrrha

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.

6
Jiju Thomas Mathew

.htaccess

ErrorDocument 403     /403.html
4
user557846

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:

  1. Atterrissez sur la vraie page 403 de votre serveur. (Accédez à une URL interdite sur votre serveur ou à la page 403 de votre choix)
  2. Cliquez avec le bouton droit de la souris et sélectionnez "Afficher la source". Sélectionnez toutes les sources et enregistrez-les dans votre fichier sur votre domaine, par exemple: http://domain.com/403.html
  3. maintenant, allez à votre vraie page interdite (ou à une situation interdite dans certaines parties de votre php), par exemple: http://domain.com/members/this_is_forbidden.php
  4. 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.

3
Tarik

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');
2
virtual_cia

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.

2
Jay Sudo

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.

1
labemi