所以我有一个Nginx服务器设置,它应该使用4个服务器块将所有http重定向到https(以及非www到www)。直接服务404
的问题是,任何404或不存在的HTTP URL首先得到301重定向到如果假设存在什么可能是一个HTTPS版本(因此创建一个额外的URL和重定向)。
参见例如:
1)http://example.com/thisurldoesntexit
301重定向
有没有办法将用户直接重定向到https 404(URL 3)?
所以我有一个Nginx服务器设置,它应该使用4个服务器块将所有http重定向到https(以及非www到www)。直接服务404
的问题是,任何404或不存在的HTTP URL首先得到301重定向到如果假设存在什么可能是一个HTTPS版本(因此创建一个额外的URL和重定向)。
参见例如:
1)http://example.com/thisurldoesntexit
301重定向
有没有办法将用户直接重定向到https 404(URL 3)?
我建议重定向到一个404页是一个糟糕的选择,你应该改为投放404上不正确的URL。
我对这个声明的原因是:
首先,如已经指出,这样做,从一个不存在的页面301
重定向到一个/notfound
绰号仅仅是一个奇数,是一个非常不好的做法,并且很可能违背RFC。
如果用户只是输入了一个长URL的单个字符会怎么样?现代浏览器使其返回到已输入的内容以修正它是不平凡的。用户必须决定您的网站是否值得重新打样,或者您的竞争对手是否想过更好的体验。
如果什么用户只需跟着断开的链接,这是一个非常明显的方式打破了,可以很容易解决吗?例如,http://www.example.org/www.example.com/page
,其中创建者将绝对URL错误地指定为相对地址,或者可能是URI(如/page.html.
),并在最后加上一个额外的点。同样,你会完全混淆用户与正在发生的事情,并提供糟糕的用户体验,如果单独留下,URL很容易被及时更正。
但是,更重要的是,什么真正的问题是,你实际上是试图解决?
是好还是坏,这是一个相当普遍的做法不加选择地重定向从http
到https
方案,没有一个帐户是否给定的页面可能会或可能不存在。事实上,如果你使用HSTS,那么通过http
服务的内容实际上变得毫无意义;带有策略的浏览器甚至不会请求任何超过http
的内容。
毫无疑问,要知道给定页面是否存在,您必须咨询后端。因此,您不妨在后端内执行从http
到https
的重定向;但它很可能会占用您宝贵的服务器资源,而不会带来额外的好处。
此外,页面的存在或不存在可能由cookie的内容决定。因此,如果您需要您的后端必须辨别http
请求是否存在页面,那么您将首先泄露私有信息,这些私人信息本来应该受到https
的保护。 (反过来,如果你的网站有没有这样的私人信息,那么也许你不应该摆在首位使用https
。)
因此,总体而言,整个方法是只是一个非常,非常糟糕的主意!
考虑,而不是:
做不做301
所有不存在的网页,以一个单一的/notfound
页面重定向。非常糟糕的做法,非常糟糕的UX。
这是完全OK做不加区别重定向从http
到https
,不考虑是否存在该页面。事实上,这不仅是好的,而且是神的意图,因为对手不应该能够辨别是否存在基于https
的网站的给定网页,因此,如果您找到并实施了针对您的解决方案的解决方案“问题”,那么你将有效地创建一个安全漏洞和一个数据泄漏。
您是否在使用.htaccess重定向mod_rewrite?你有尝试过吗? – MilanG
不知道在重定向到https之前是否有可能知道该网址在https中不会回应,但问题是:您为什么要这么做,而不是像现在这样使用重定向来检查https网址?将所有http请求重定向到https的成本对于Apache来说非常轻。因为即使你的问题存在apache conf,它在perfs方面可能会花费更多。 –
谢谢你们 - 我应该提到它的一个Nginx服务器。干杯 – KBS