在一个月前,腾讯各个BG针对了419这个话题狠狠地搞了一波事,做出了许许多多响应码是419的网页,附带上各种骚文案,真的不愧是BAT三大家中的最强产品。
这不,过去的520我也学着搞了一波事情。今天,我会让你们的操作也像他们一样骚,会简单地借这个状态码搞事情!
由于HTTP是基于文本的协议(HTTP/2除外),所以在传输过程中全程使用我们可以识别的文字进行通信。在响应头中,第一行就包含了HTTP版本和状态,以及状态phrase。
HTTP/1.1 200 OK
相信这个东西,大家都不会陌生。接下来,需要请到的是nginx傻瓜化自定义状态码的配置两个句式。
return
很明显,就是返回相应状态码的意思。这时候,它的用法也有两种:
return <code>
return <code> <content>
其中code明显是我指定的的状态码,范围是1到999;
而下一个参数代表的是,返回这个状态码的同时携带的正文内容。
如果code为301或302等跳转型状态码时,content也可以代表跳转的路径。
error_page
error_page <code> <path>
这个语句的作用主要是用于自定义各状态码的错误页面的。参数意义如下:
- code – 对应的状态码
- path – 错误页面对应的路径
其中,需要对这个path稍稍深纠一下。因为这里的行为有两种:
直接映射 与 跳转
假定几种情况说一下会发生的事情:
- 一个绝对路径 – 直接映射
- 一个相对路径 – 跳转
- 一个http/https的URL – 跳转
如果路径的填写涉及到跳转,那么在跳转之后,客户端最终收到的状态码其实是一个302 Found与最终跳转路径的状态码。所以要搞事的话,我们只能选择上面这种直接映射的方案。
这些情况需要耐心进行尝试以及调整,如果还是翻车了,那我的建议其实是查找更多的文档。
关于路径路由的碎碎念
其实对于nginx来说,其中的结构无非就是建立了无数个location块,然后匹配落入。经过刚刚使用这两个句式,我们使得一个URL返回到了我们想要的状态码以及想要的内容。然而简单的return语句并不能满足我们,所以在error_page中我们直接映射到了一个路径中。
与其说是直接映射,对于nginx,其实是使得这个请求落入到了对应路径的一个或多个location块中,而其变量不发生改变。这就意味着,如果你捕捉的路径是/foo/,而映射的路径是/bar/,那么nginx会使用/bar/的location语句块进行处理,但传递的路径是/foo/。
所以总结起来,我的配置如下:
error_page 520 /index.php
location /generate_520/ {
return 520;
}
捕捉/generate_520/的请求,返回520状态码,并交由/index.php处理。然后在WordPress上建立了一个如此路径的页面,就可以正常地返回我们需要的内容。
可以了,完成任务,溜溜球哈哈哈!
明天下午还要面试猪厂,要好好休息啦~
晚安噜!
alphaxz@SCUT