在这种情况下,语义正确的HTTP响应代码为403 Forbidden:
服务器理解了该请求,但拒绝执行该请求。授权将无济于事,并且不应重复该请求。如果请求方法不是HEAD,并且服务器希望公开为什么未满足请求,则应在实体中描述拒绝的原因。如果服务器不希望将此信息提供给客户端,则可以使用状态代码404(未找到)来代替。
(尽管403响应的定义说“授权无济于事”,但IMO应该理解为专门指HTTP Basic / Digest身份验证,应改为使用状态代码“ 401未经授权”。因为您没有使用这些验证方法中的任一种,您的情况下403都是适当的状态代码。)
但是,使用403个状态码显示(或至少强烈暗示)的事实,有是与该URL的网页,即使服务器拒绝提供它。由于您可能希望对潜在的入侵者隐瞒这件事,因此HTTP / 1.1标准明确允许返回404 Not Found状态代码(重点是我):
服务器未找到与请求URI匹配的任何内容。没有迹象表明这种情况是暂时的还是永久的。如果服务器通过某种内部可配置的机制得知旧资源永久不可用并且没有转发地址,则应使用410(已消失)状态代码。
当服务器不希望确切显示请求被拒绝的原因或没有其他响应可用时,通常使用此状态代码。
当然,要使这种隐藏完全有效,您返回的404错误页面必须与您为实际不存在的页面返回的内容相同。否则,它只会愚弄最愚蠢和最随意的攻击者。(如果您的目标只是使页面不在Google的索引之内,则403响应也将这样做。)
您的问题和其他答案中建议的其他可能回答是什么?
如前所述,我认为此处不适合使用401响应。 它可以在实际工作中,只要大多数浏览器和搜索引擎将处理任何格式不正确或无法识别的4 XX系列响应代码,就好像它是一个404,但根据仍然不是有效的HTTP规范,而且也没有实际的理由,更喜欢它超过403或404。
至于使用301(或302)重定向到单独的“ 404错误”页面,这是草率的mod_rewrite教程所传播的一种糟糕的做法,与直接返回404响应相比,它绝对没有兑换功能:
访问者感到困惑,因为他们尝试访问的URL被错误页面的URL取代。因此,他们看到一则消息说,他们已经到了一个不存在的页面,但不容易看到的迹象是什么他们试图访问的页面,所以不能轻易尝试像URL固定任何明显的错别字任何恢复策略,或将其复制并粘贴到Google或Wayback Machine中。
它可能会使搜索引擎感到困惑,特别是如果robots.txt中不允许您的404页面,或者如果它错误地返回200 OK响应而不是真实的404状态代码(“软404”),则可能导致您的404页面出现在搜索中随机搜索词的搜索结果。
这会导致您服务器上的负载量很少,增加对访问者的响应时间,并有可能减慢搜索引擎抓取您的网站的速度,因为对不存在(或隐藏)页面的每个请求现在都需要进行额外的HTTP回合,旅行。
它没有SEO的好处,因为从页面重定向到404页面的任何“链接汁”都会丢失。
(当然,在一个情况下,你做要使用301重定向,而不是404响应的是在实际的页面已经感动了,你可以重定向访问者到其正确位置。但是,这不是这里的情况进行讨论。)
最后,我想表达一种观点,在这里的许多评论中都表明,仅仅像这样“隐藏”您的管理页面并不能完全替代基于密码的身份验证。就是说,如果您已经建立了安全的身份验证系统,则在纵深防御方法中,隐藏页面可能会作为额外的一层(尽管相当薄弱)很有用。