2017-08-10 38 views
1

所以我有一个Nginx服务器设置,它应该使用4个服务器块将所有http重定向到https(以及非www到www)。直接服务404

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

参见例如:

1)http://example.com/thisurldoesntexit

301重定向

2)https://example.com/thisurldoesntexit

3)https://example.com/notfound

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

+0

您是否在使用.htaccess重定向mod_rewrite?你有尝试过吗? – MilanG

+0

不知道在重定向到https之前是否有可能知道该网址在https中不会回应,但问题是:您为什么要这么做,而不是像现在这样使用重定向来检查https网址?将所有http请求重定向到https的成本对于Apache来说非常轻。因为即使你的问题存在apache conf,它在perfs方面可能会花费更多。 –

+0

谢谢你们 - 我应该提到它的一个Nginx服务器。干杯 – KBS

回答

0

我建议重定向到一个404页是一个糟糕的选择,你应该改为投放404上不正确的URL。

我对这个声明的原因是:

  • 通过重定向离开该页面,你正在发行的标头隐说“的内容没有在此URL存在,但在这里做了。”我不知道各种搜索引擎将如何被重定向到反应的404
  • ,当我说有关于我的URL变化时,我已经被打错,我可以从我自己的经验为用户说话单个角色可能非常令人沮丧。然后我需要花时间重新输入整个URL。
  • 可避免在您的.htaccess文件或任何逻辑来判断一个网页的404这将大大简化您最初的逻辑(其由这通过计算得到的每一个页面加载) - 以及将远远删除更多重定向比http://badurlhttps://badurlhttps://404
2

首先,如已经指出,这样做,从一个不存在的页面301重定向到一个/notfound绰号仅仅是一个奇数,是一个非常不好的做法,并且很可能违背RFC。

  • 如果用户只是输入了一个长URL的单个字符会怎么样?现代浏览器使其返回到已输入的内容以修正它是不平凡的。用户必须决定您的网站是否值得重新打样,或者您的竞争对手是否想过更好的体验。

  • 如果什么用户只需跟着断开的链接,这是一个非常明显的方式打破了,可以很容易解决吗?例如,http://www.example.org/www.example.com/page,其中创建者将绝对URL错误地指定为相对地址,或者可能是URI(如/page.html.),并在最后加上一个额外的点。同样,你会完全混淆用户与正在发生的事情,并提供糟糕的用户体验,如果单独留下,URL很容易被及时更正。

但是,更重要的是,什么真正的问题是,你实际上是试图解决?

  • 是好还是坏,这是一个相当普遍的做法不加选择地重定向从httphttps方案,没有一个帐户是否给定的页面可能会或可能不存在。事实上,如果你使用HSTS,那么通过http服务的内容实际上变得毫无意义;带有策略的浏览器甚至不会请求任何超过http的内容。

  • 毫无疑问,要知道给定页面是否存在,您必须咨询后端。因此,您不妨在后端内执行从httphttps的重定向;但它很可能会占用您宝贵的服务器资源,而不会带来额外的好处。

  • 此外,页面的存在或不存在可能由cookie的内容决定。因此,如果您需要您的后端必须辨别http请求是否存在页面,那么您将首先泄露私有信息,这些私人信息本来应该受到https的保护。 (反过来,如果你的网站有没有这样的私人信息,那么也许你不应该摆在首位使用https。)

因此,总体而言,整个方法是只是一个非常,非常糟糕的主意!

考虑,而不是

  • 301所有不存在的网页,以一个单一的/notfound页面重定向。非常糟糕的做法,非常糟糕的UX。

  • 这是完全OK做不加区别重定向从httphttps,不考虑是否存在该页面。事实上,这不仅是好的,而且是神的意图,因为对手不应该能够辨别是否存在基于https的网站的给定网页,因此,如果您找到并实施了针对您的解决方案的解决方案“问题”,那么你将有效地创建一个安全漏洞和一个数据泄漏。

+1

谢谢 - 您的详细答案非常有意义。 – KBS

+0

@KBS不客气!不要忘了点击“接受”! – cnst