Nginx 直接服务404

Nginx 直接服务404,nginx,drupal,url-rewriting,http-status-code-301,Nginx,Drupal,Url Rewriting,Http Status Code 301,因此,我设置了一个Nginx服务器,它应该使用4个服务器块将所有http重定向到https(非www重定向到www) 问题是,任何404或不存在的http URL首先会得到301重定向,如果它假设存在,则可能是https版本(因此会创建一个额外的URL和重定向) 见示例: (一) 301重定向 (二) 404 (三) 有没有办法将用户直接重定向到https 404(URL 3)?使用模块直接为404页面提供服务,而不会造成太多过载。我建议重定向到404页面是一个糟糕的选择,您应该在错误的URL上

因此,我设置了一个Nginx服务器,它应该使用4个服务器块将所有http重定向到https(非www重定向到www)

问题是,任何404或不存在的http URL首先会得到301重定向,如果它假设存在,则可能是https版本(因此会创建一个额外的URL和重定向)

见示例:

(一)

301重定向

(二)

404

(三)


有没有办法将用户直接重定向到https 404(URL 3)?

使用模块直接为404页面提供服务,而不会造成太多过载。

我建议重定向到404页面是一个糟糕的选择,您应该在错误的URL上为404页面提供服务

我这样说的理由是:

  • 通过重定向离开页面,您发出的标题隐式地说“此URL上不存在内容,但它在此处存在”。我不确定各种搜索引擎对被重定向到404会有什么反应
  • 我可以从我作为一个用户的经验中说,当我输入了一个字符时,让我更改URL是非常令人沮丧的。然后我需要花时间再次键入整个URL
  • 您可以避免在.htaccess文件或其他文件中使用逻辑来判断页面是否为404。这将大大简化您的初始逻辑(by在每次页面加载时都会进行计算),并将删除比to中的单个重定向多得多的重定向

首先,正如已经指出的那样,将
301
从一个不存在的页面重定向到一个
/notfound
名字对象,是一种非常糟糕的做法,可能会对RFC不利

  • 如果用户只是错误地输入了一个长URL的单个字符怎么办?现代浏览器使返回已键入的内容以进行更正变得非常重要。用户必须决定你的站点是否值得从头开始重新输入,或者你的竞争对手是否想到了更好的体验

  • 如果用户只是简单地跟随一个断开的链接,该链接以非常明显的方式断开,并且可以很容易地修复,该怎么办?例如,
    http://www.example.org/www.example.com/page
    ,其中一个绝对URL被创建者错误地输入为相对URL,或者可能是类似于
    /page.html的URI。
    ,最后有一个额外的点。同样,你会完全把用户和正在发生的事情搞混,并提供一个糟糕的用户体验,如果不理会,URL很容易被及时更正

但是,更重要的是,你到底想解决什么真正的问题

  • 不管是好是坏,不加区分地从
    http
    重定向到
    https
    方案是一种非常常见的做法,而不考虑给定页面是否存在。事实上,如果您使用HST,那么通过
    http
    提供的内容实际上就变得毫无意义;具有策略的浏览器从那时起甚至不会通过
    http
    请求任何内容

  • 毫无疑问,为了知道给定页面是否存在,您必须咨询后端。同样,您也可以从后端执行从
    http
    https
    的重定向;但它可能会占用您宝贵的服务器资源,几乎没有额外的好处

  • 此外,页面的存在或不存在可能由cookies的内容决定。同样地,如果您要求后端必须识别
    http
    请求的页面是否存在,那么您实际上就是在泄漏原本受
    https
    保护的私有信息。(反过来,如果您的站点没有此类私人信息,那么您可能不应该首先使用
    https
    。)

所以,总的来说,整个方法只是一个非常非常糟糕的主意

改为考虑

  • 执行NOT执行
    301
    重定向,从所有不存在的页面重定向到单个
    /notfound
    页面。非常糟糕的实践,非常糟糕的用户体验

  • http
    任意重定向到
    https
    ,而不考虑页面是否存在,这完全是OK。事实上,这不仅没关系,而且这是上帝的旨意,因为对手不应该能够识别基于
    https
    的站点是否存在给定页面,因此,如果您确实找到并实施了解决“问题”的解决方案,那么您将有效地创建安全漏洞和数据泄漏


不,这是在服务器级别。您是否使用.htaccess重定向和mod_rewrite?您是否尝试过使用它?不确定是否有可能知道url在重定向到https之前不会以https响应,但问题是:为什么您要这样做,而不是像当前一样使用重定向检查https url?对于Apache来说,将所有http请求重定向到https的成本非常低。因为即使有一个apacheconf来解决您的问题,在性能方面也可能会花费更多。谢谢大家-我应该提到它是一个Nginx服务器。干杯这个“问题”很琐碎,你应该关注其他事情。@Dayo,我不同意这个“琐碎”的评估——本质上,OP想在他们的网站上添加一个;安全问题并不是那么简单!谢谢-您详细的回答很有道理。@KBS不客气!别忘了点击“接受”!