全局改写规则

应用之间会有很多相同的页面规则,除了使用 全局自定义动作 外,我们还可以使用 全局改写规则 来实现。

全局改写规则和全局自定义动作不同,后者需要在应用中添加,并且走发布流程才会生效。 而前者对于应用是无感知的,也不用走发布流程。也就是增加了一个改写规则,就直接对所有的应用生效了。 所以使用全局改写规则的时候,需要格外小心一些。

下面我们先新建一个没有任何改写规则的应用:

然后我们不加改写规则,直接访问:

$ curl -i -H 'host: rewrite-rule-test.com' 52.43.45.19/404.html
HTTP/1.1 404 Not Found
Server: openresty+
Date: Mon, 21 Jan 2019 15:59:57 GMT
Content-Type: text/html
Content-Length: 166
Connection: keep-alive

<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>openresty</center>
</body>
</html>

会返回 404 的错误信息,这是预料之内的。 然后我们去 全局设置 中的 全局改写规则 页面,新增一个规则。

在全局改写规则页面中,会列出已经存在的全局规则。 我们点击 新规则 按钮,来新建一个。

这个页面和应用的 页面规则 类似,都包含开启条件和动作两个部分。

下面是一个简单的例子,无条件的返回一个字符串。

改写规则的下拉列表里面有很多动作,我们从中选择“响应动作”类别中的 输出响应体

点击后下角的 创建 按钮,一个全局改写规则就设置成功了。

这时候这个全局改写规则,不用走发布流程,它已经对上面新增的应用生效了。 我们访问看看返回值:

$ curl -i -H 'host: rewrite-rule-test.com' 52.43.45.19/404.html
HTTP/1.1 200 OK
Date: Tue, 14 Nov 2023 10:51:34 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Server: OpenResty Edge
Req-ID: 00002a000e80584eb9b0b942

<!doctype html>
<html>
<head>
  <title>Response</title>
</head>
<body>
</body>
</html>

这次没有返回 404 的错误信息,而是全局改写规则设置的相应体。

我们再把这个全局改写规则删掉,试试看。

再次访问,又返回了 404:

$ curl -i -H 'host: rewrite-rule-test.com' 52.43.45.19/404.html
HTTP/1.1 404 Not Found
Server: openresty+
Date: Mon, 21 Jan 2019 16:00:11 GMT
Content-Type: text/html
Content-Length: 166
Connection: keep-alive

<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>openresty</center>
</body>
</html>