全局改写规则

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

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

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

全局改写规则 - 图1

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

  1. $ curl -i -H 'host: rewrite-rule-test.com' 52.43.45.19/404.html
  2. HTTP/1.1 404 Not Found
  3. Server: openresty+
  4. Date: Mon, 21 Jan 2019 15:59:57 GMT
  5. Content-Type: text/html
  6. Content-Length: 166
  7. Connection: keep-alive
  8. <html>
  9. <head><title>404 Not Found</title></head>
  10. <body bgcolor="white">
  11. <center><h1>404 Not Found</h1></center>
  12. <hr><center>openresty</center>
  13. </body>
  14. </html>

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

全局改写规则 - 图2

全局改写规则 - 图3

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

全局改写规则 - 图4

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

全局改写规则 - 图5

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

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

全局改写规则 - 图6

全局改写规则 - 图7

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

全局改写规则 - 图8

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

  1. $ curl -i -H 'host: rewrite-rule-test.com' 52.43.45.19/404.html
  2. HTTP/1.1 404 Not Found
  3. Server: openresty+
  4. Date: Mon, 21 Jan 2019 16:00:09 GMT
  5. Content-Type: text/html
  6. Content-Length: 166
  7. Connection: keep-alive
  8. <html>
  9. <head><title>404 Not Found</title></head>
  10. <body bgcolor="white">
  11. <center><h1>404 Not Found</h1></center>
  12. <hr><center>openresty</center>
  13. </body>
  14. </html>

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

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

全局改写规则 - 图9

全局改写规则 - 图10

再次访问,又返回了 404:

  1. $ curl -i -H 'host: rewrite-rule-test.com' 52.43.45.19/404.html
  2. HTTP/1.1 404 Not Found
  3. Server: openresty+
  4. Date: Mon, 21 Jan 2019 16:00:11 GMT
  5. Content-Type: text/html
  6. Content-Length: 166
  7. Connection: keep-alive
  8. <html>
  9. <head><title>404 Not Found</title></head>
  10. <body bgcolor="white">
  11. <center><h1>404 Not Found</h1></center>
  12. <hr><center>openresty</center>
  13. </body>
  14. </html>