全域性改寫規則
應用之間會有很多相同的頁面規則,除了使用 全域性自定義動作
外,我們還可以使用 全域性改寫規則
來實現。
全域性改寫規則和全域性自定義動作不同,後者需要在應用中新增,並且走釋出流程才會生效。 而前者對於應用是無感知的,也不用走釋出流程。也就是增加了一個改寫規則,就直接對所有的應用生效了。 所以使用全域性改寫規則的時候,需要格外小心一些。
下面我們先新建一個沒有任何改寫規則的應用:
然後我們不加改寫規則,直接訪問:
$ 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>