Le code de réponse HTTP sémantiquement correct pour cette situation serait 403 Interdit :
Le serveur a compris la demande, mais refuse de la satisfaire. L'autorisation n'aidera pas et la demande NE DEVRAIT PAS être répétée. Si la méthode de demande n'était pas HEAD et que le serveur souhaite rendre public pourquoi la demande n'a pas été satisfaite, il DEVRAIT décrire la raison du refus dans l'entité. Si le serveur ne souhaite pas mettre ces informations à la disposition du client, le code d'état 404 (Not Found) peut être utilisé à la place.
(Bien que la définition de la 403 réponse indique que « l' autorisation ne sera pas utile », l' OMI cela devrait être comprise comme faisant référence spécifiquement à l' authentification HTTP de base / Digest , pour lesquels le code d'état 401 non autorisé doit être utilisé à la place. Puisque vous ne l' aide l'une de ces méthodes d'authentification, 403 est le code d'état approprié dans votre cas.)
Cependant, en utilisant un code d'état 403 révèle (ou au moins implique fortement) le fait qu'il y est une page avec cette URL, même si le serveur refuse de le livrer. Comme c'est quelque chose que vous voudrez peut-être cacher aux intrus potentiels, la norme HTTP / 1.1 autorise explicitement le code d'état 404 Not Found à retourner à la place (c'est moi qui souligne ):
Le serveur n'a rien trouvé correspondant à l'URI de la demande. Aucune indication n'est donnée quant à savoir si la condition est temporaire ou permanente. Le code d'état 410 (disparu) DEVRAIT être utilisé si le serveur sait, par le biais d'un mécanisme configurable en interne, qu'une ancienne ressource est indisponible en permanence et n'a pas d'adresse de transfert.
Ce code d'état est couramment utilisé lorsque le serveur ne souhaite pas révéler exactement pourquoi la demande a été refusée, ou lorsqu'aucune autre réponse n'est applicable.
Bien sûr, pour que cette dissimulation soit efficace, la page d'erreur 404 que vous renvoyez doit apparaître identique à celle que vous renvoyez pour les pages inexistantes réelles . Sinon, cela ne fera que tromper les attaquants les plus stupides et les plus occasionnels. (Si votre objectif est simplement de garder les pages hors de l'index de Google, une réponse 403 le fera tout aussi bien.)
Qu'en est-il des autres réponses possibles suggérées dans votre question et des autres réponses?
Comme je l'ai indiqué précédemment, je ne pense pas qu'une réponse 401 soit appropriée ici. Il peut fonctionner dans la pratique, dans la mesure où la plupart des navigateurs et des moteurs de recherche traitera tout 4 malformé ou non reconnu xx code de réponse de la série comme si elle était un 404, mais il est toujours pas valide selon la spécification HTTP, et il n'y a aucune raison pratique de préférer plus de 403 ou 404.
Quant à l'utilisation d'une redirection 301 (ou 302) vers une page "404 error" distincte, c'est une pratique affreuse répandue par des didacticiels bâclés mod_rewrite, et n'a absolument aucune fonctionnalité de rachat par rapport au retour direct d'une réponse 404:
C'est déroutant pour les visiteurs, car l'URL qu'ils essayaient de visiter est remplacée par l'URL de la page d'erreur. Ainsi, ils voient un message indiquant qu'ils ont atteint une page inexistante, mais aucune indication facilement visible de ce qu'était la page qu'ils essayaient de visiter, et ne peuvent donc pas facilement essayer de stratégies de récupération comme la correction de fautes de frappe évidentes dans l'URL, ou copiez-collez-le dans Google ou dans Wayback Machine.
Cela peut confondre les moteurs de recherche, surtout si votre page 404 est interdite dans robots.txt , ou si elle renvoie de manière incorrecte une réponse 200 OK au lieu d'un véritable code d'état 404 ( "soft 404" ), ce qui pourrait faire apparaître votre page 404 dans la recherche résultats pour des termes de recherche aléatoires.
Il provoque (une petite quantité) de charge supplémentaire sur vos serveurs, augmente le temps de réponse aux visiteurs et ralentit potentiellement les moteurs de recherche explorant votre site, car chaque demande de page inexistante (ou cachée) implique désormais une ronde HTTP supplémentaire- voyage.
Il n'a aucun avantage SEO, car tout "jus de lien" des pages redirigées vers une page 404 est de toute façon perdu.
(Bien sûr, une situation où vous ne souhaitez utiliser une redirection 301 au lieu d'une réponse 404 est lorsque la page en fait est déplacé, et vous pouvez rediriger le visiteur vers son emplacement correct. Mais ce n'est pas le cas discuté ici.)
Enfin, je voudrais faire écho au sentiment, exprimé dans de nombreux commentaires ici, que le simple fait de "masquer" vos pages d'administration comme celle-ci n'est pas un substitut adéquat à une authentification par mot de passe appropriée . Cela dit, si vous disposez déjà d'un système d'authentification sécurisé, masquer les pages peut être utile en tant que couche supplémentaire, quoique assez faible, dans une approche de défense en profondeur .