Question

Actuellement, dans mes scripts PHP, je redirige l'utilisateur vers une page d'erreur 404 non trouvée personnalisée lorsqu'il tente d'accéder à un contenu inexistant ou n'appartenant pas à cet utilisateur. Comme si:

header('Location: http://www.mydomain.com/error/notfound/');
exit;

Je réalise que l'appel header () ci-dessus envoie un code d'état de redirection 302 par défaut.

Ce que je ne comprends pas, c’est quand je devrais envoyer le code d’état 404 non trouvé. Avant de rediriger l'utilisateur? Ou lorsque j'affiche la page / error / notfound / ?

Merci pour votre aide!

Était-ce utile?

La solution

Vous devriez faire quelque chose comme ceci:

header("HTTP/1.0 404 Not Found");
include 'error.php';
die();

Autres conseils

Vous n'exécutez pas d'erreurs 404 en tant que redirection.

Vous voulez vraiment envoyer l'en-tête d'état 404, puis remplacer la sortie actuelle par le corps d'une page 404.

Il existe différentes façons de procéder. Cela dépend en grande partie de la structure de votre site. Les applications MVC donnent généralement cela avec un transfert. J'ai vu d'autres systèmes émettre une exception puis le gestionnaire d'exceptions enregistré se charge d'afficher la page 404.

Quoi qu'il en soit, les étapes approximatives sont

  1. Déterminer que le contenu est invalide
  2. sortir de l'exécution en cours
  3. Efface toutes les sorties, le cas échéant.
  4. Envoyez l'en-tête d'état 404
  5. Envoyez le contenu de la page 404

Vous ne pouvez pas utiliser 404 et Emplacement: ensemble. L'emplacement n'est valide que pour certaines réponses (201 et 3xx)

Vous pouvez toutefois envoyer une page HTML personnalisée en tant que corps de votre réponse 404.

De php.net:

  

Il existe deux appels d'en-tête dans des cas spéciaux. Le premier est un en-tête qui commence par la chaîne " HTTP / " (la casse n'est pas significative), qui sera utilisé pour déterminer le code d'état HTTP à envoyer. Par exemple, si vous avez configuré Apache pour utiliser un script PHP afin de traiter les demandes de fichiers manquants (à l'aide de la directive ErrorDocument), vous pouvez être sûr que votre script génère le code d'état approprié.

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

http://us.php.net/manual/en/function .header.php

Vous devez envoyer un code d'état HTTP 404. Les navigateurs et robots d'exploration le comprennent bien. Vous pouvez également inclure une page d'erreur plus conviviale expliquant ce qui s'est passé, y compris un formulaire de recherche sur votre site, des liens Soundex, etc.

Un " redirection " et un " non trouvé " sont des concepts différents.

Quel fichier pourrait être trouvé?
http://www.mydomain.com/error/notfound/
ou
http://www.mydomain.com/not_exist.html

Le " http://www.mydomain.com/not_exist.html . ; La page doit avoir un en-tête 404 ET le " Page non trouvée " contenu.

Un correctif pourrait être:

header("HTTP/1.0 404 Not Found");
readfile('http://www.mydomain.com/error/notfound/');
exit;

Mais cela nécessite 2 requêtes Apache et est un peu méchant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top