if (strstr($_SERVER['REQUEST_URI'],'index.php')) {
header('HTTP/1.0 404 Not Found');
}
Pourquoi ça ne marche pas? J'obtiens une page blanche.
php
header
http-status-code-404
Danorton
la source
la source
Réponses:
Votre code est techniquement correct. Si vous regardiez les en-têtes de cette page vierge, vous verriez un en-tête 404 et d'autres ordinateurs / programmes seraient en mesure d'identifier correctement la réponse en tant que fichier introuvable.
Bien sûr, vos utilisateurs sont toujours SOL. Normalement, les 404 sont gérés par le serveur Web.
Le problème est qu'une fois que le serveur Web commence à traiter la page PHP, il a déjà dépassé le point où il gérerait un 404
En plus de fournir un en-tête 404, PHP est désormais responsable de la sortie de la page 404 réelle.
la source
Si vous regardez les deux dernières lignes d'écho, c'est là que vous verrez le contenu. Vous pouvez le personnaliser comme vous le souhaitez.
la source
C'est un comportement correct , c'est à vous de créer le contenu de la page 404.
L'en-tête 404 est utilisé par les araignées et les gestionnaires de téléchargement pour déterminer si le fichier existe.
(Une page avec un en-tête 404 ne sera pas indexée par Google ou d'autres moteurs de recherche)
Cependant, les utilisateurs normaux ne regardent pas les en-têtes http et utilisent la page comme une page normale.
la source
Pour mémoire, voici le gestionnaire de toutes les cas:
la source
die()
nécessaire?Chargez la page 404 du serveur par défaut, si vous en avez une, par exemple définie pour apache:
la source
Depuis php 5.4, vous pouvez maintenant faire
http_response_code(404);
la source
Une autre solution, basée sur celle de @ Kitet.
Si vous programmez un site Web hébergé sur un serveur dont vous n'avez pas le contrôle, vous ne saurez pas quel fichier est le "404missing.html". Cependant, vous pouvez toujours le faire.
De cette façon, vous avez fourni exactement le même résultat d'une page 404 normale sur le même serveur. Un observateur ne pourra pas faire la distinction entre une page PHP existante renvoie 404 et une page inexistante.
la source
essayez avec:
Au revoir!
la source
Version un peu plus courte. Supprime l'écho impair.
la source
ne simplifiez jamais les instructions echo, et n'oubliez jamais le point virgule comme ci-dessus, aussi pourquoi exécuter un substr sur la page, nous pouvons facilement lancer php_self
la source
Si vous voulez que la page d'erreur par défaut du serveur soit affichée, vous devez gérer cela dans le serveur.
la source
Vous le faites bien, même si cela pourrait nécessiter un certain raffinement. On dirait que cela a été résolu, alors parlons des avantages pratiques de l'application:
Un ancien site Web qui contient une grande collection de documents techniques multilingues l'exécutait dans un conditionnel if else:
Le problème (en plus du message inutile et de la mauvaise expérience utilisateur) est que nous utilisons généralement un robot d'exploration de liens (dans notre cas, l'intégrité) pour vérifier les mauvais liens et les documents manquants. Cela signifie que nous obtenions une réponse parfaitement correcte 200 sans erreur nous indiquant qu'il y avait un fichier là-bas. Integrity ne savait pas que nous attendions un PDF, nous avons donc dû ajouter manuellement un en-tête 404 avec php. En ajoutant votre code au-dessus du dé (car rien après ne s'exécuterait et l'en-tête devrait toujours être avant tout html rendu de toute façon), l'intégrité (qui se comporte plus ou moins comme un navigateur) renverrait un 404 et nous saurions exactement où chercher les manquants des dossiers. Il existe des moyens plus élégants de dire à l'utilisateur qu'il y a une erreur,
la source
Essaye ça:
la source
Vous savez, sur mon site Web, j'ai créé quelque chose comme ceci:
J'espère que ça t'aide.
la source
Je suis venu à ce problème .. Je pense que la redirection vers un lien inexistant sur votre serveur pourrait faire l'affaire! Parce que le serveur renverrait son 404:
header('Redirect abbb.404.nonexist');
<qui n'existe pas à coup sûrla source
Si vous souhaitez afficher la page 404 par défaut du serveur, vous pouvez la charger dans un cadre comme celui-ci:
la source