web-dev-qa-db-fra.com

Est-il judicieux de générer une erreur 404 avec PHP?

Description du problème

Bonjour, Le paramètre actuel de mon fichier . Htaccess ne permet aucune sorte de fichiers 404 (pour autant que je sache).

Je veux dire, il capture chaque type d'URL comme mysite.com/asfasfasf puis l'envoie à index.php?lang=asfasfasf puis à index.php 301-redirections vers mysite.com/en.

En tous cas,

Question

J'ai une page de galerie qui prend le nom du projet en entrée, donc si un méchant utilisateur arrive et que types mysite.com/gallery/asfasfasf, je devrais les rediriger vers ma page 404.php, en utilisant php, mais comment?

Je pense que mes options sont:

  1. 301-redirection vers l'emplacement 404.php
  2. 404-redirection vers l'emplacement '404.php'
  3. Oubliez environ 404.php, imprimez simplement " le projet" asfasfasf "n’existe pas. " sur la page de la galerie.
  4. ??

Lequel est le plus logique? Plus important encore, lequel est le meilleur pour le référencement?

Merci pour toute aide!

1
jeff

Dans votre cas, l’utilisateur demande consciemment une ressource invalide): il doit renvoyer un code de réponse 404. Le corps de la réponse est une description de l'utilisateur de votre site. Si votre 404.php ressemble à un modèle et contient principalement du code HTML, vous pouvez simplement include le. Sinon, montrer le "project '$name' does not exist" est la meilleure alternative.

Ainsi, par exemple, dans PHP, cela ressemblerait à ceci (bien sûr, si vous utilisez un framework moderne PHP, vous pouvez simplement utiliser une sorte de type d'exception NotFound) :

if(project_exists($name)) {
    // show the project like you do now
} else {
    // project not found, return a 404 respose code
    header('HTTP/1.0 404 Not Found');

    // generate the response body either by
    // including your 404-page (if it's mostly HTML, like a template)
    include('/path/to/404.php');

    // or just stating that the resource was not found
    echo 'Project "', $name, '" does not exist!';   
}

En ce qui concerne vos options:

  • Le numéro 1 n'a pas beaucoup de sens - si une ressource n'a jamais existé, il est inutile de le rediriger (code 301 ou 302) vers la page d'accueil ou même vers une page 404.

    Cela n'a de sens que si la ressource a été supprimée et que vous savez quel est le nouveau chemin (par exemple, si vous avez une carte avec les anciens et nouveaux chemins/noms de projets) ou si vous pouvez deviner ce que l'utilisateur souhaite et le rediriger vers la ressource appropriée. (par exemple, vous pouvez "corriger" les URL mal typées avec une recherche floue). Bien sûr, vous pouvez également résoudre ce problème avec une page "intelligente" 404.

  • Le numéro 2 ne fonctionnera pas. Si je vous ai bien compris, vous renverriez un code de réponse 404 et ajouteriez un en-tête Location-. Mais les codes 4xx ne doivent pas renvoyer les en-têtes Location - uniquement 3xx et 201 (et 202) autoriser le Location en-tête .

Même du point de vue du référencement, vous devriez simplement utiliser 404. Premièrement, il ne devrait y avoir aucun lien vers des ressources invalides, et si vous faites quelque chose d'extraordinaire, vous blessez les personnes qui utilisent un vérificateur de liens pour vérifier les liens invalides de leur côté.

Si l'adresse d'une ressource existante change, il est alors logique d'utiliser 301.

Si la ressource existante est simplement supprimée (comme dans 410 Gone), alors une redirection vers un site générique (comme la page d'accueil) peut rendre Google heureux, mais elle risque de ne pas être conviviale (je le déteste quand je lis un article sur $TOPIC, cliquez sur un lien de cet article et soyez redirigé vers une page totalement différente, car le lien est incorrect). Vous pouvez utiliser des éléments gris clair comme ici, il vous suffit de rediriger le bot Google/Bing/Yahoo et d'afficher le code 404 au reste.

3
vstm

Je sais que de nombreux développeurs ont choisi de traiter simplement le lien. Si non valide, chargez la page principale et supprimez tout retour. Du point de vue strictement et SEO de l'indexation des moteurs de recherche et autres choses, cela ne fera pas beaucoup de mal, car il sera toujours résolu en un site valide et le vôtre.

Cependant, étant donné que vous êtes un ami, et que vous souhaitez peut-être suivre le nombre d'accès aux pages invalides sur votre site (pour la sécurité et la gestion des accès), vous souhaiterez peut-être mettre en place une sorte de 404. Vous pouvez soit créer une règle globale pour le site qui se déclenche, soit inclure dans votre code PHP un 404 et lors de la validation, l'échec par défaut indiquerait cela. Aussi simple que cela, vous n'avez même pas besoin de rediriger vraiment.

La valeur du lancement de 404 a été largement débattue parmi les développeurs Web, mais aucun camp n’a réussi à fournir un standard de facto sur ce point avec un argument assez fort. C’est donc aux développeurs individuels de choisir leur camp.

0
GµårÐïåñ