EdgeScript (ES) は、CDN ルールで条件式を構築するための 6 つの論理関数を提供します。and、or、not、eq、ne、および null です。3 つのブール演算子 (and、or、not) はショートサーキット評価をサポートしているため、結果が決定されるとすぐにエンジンは引数の評価を停止します。
関数概要
| 関数 | シグネチャ | 短絡評価 | 戻り値 |
|---|---|---|---|
and | and(arg, ...) : Boolean | 最初の false | true(すべての引数が true の場合) |
or | or(arg, ...) : Boolean | 最初の true | true(いずれかの引数が true の場合) |
not | not(arg) : Boolean | — | 反転したブール値 |
eq | eq(arg1, arg2) : Boolean | — | true(等しい場合) |
ne | ne(arg1, arg2) : Boolean | — | true(等しくない場合) |
null | null(v) : Boolean | — | true(v が空文字列、空配列、または空辞書の場合) |
and
シグネチャ: and(arg, ...) : Boolean
AND 論理演算子を実行します。いずれかの引数が false と評価されると、ショートサーキット評価が停止し、残りの引数はスキップされます。
パラメーター: 任意の型の 1 つ以上の値。
戻り値: すべての値が true と評価される場合、true。いずれかの値が false と評価される場合、false。
例: 特定のクエリパラメーターが存在し、指定された値と一致する場合にのみ、レスポンスヘッダーを設定します。
if and($arg_mode, eq($arg_mode, 'set_header')) {
add_rsp_header('USER-DEFINED-1','path1')
}リクエストに
mode=set_headerが含まれている場合、and()は両方の条件を評価し、trueを返します。USER-DEFINED-1レスポンスヘッダーが設定されます。リクエストに
modeパラメーターがない場合、$arg_modeはfalseと評価されます。ショートサーキット評価が停止し、eq()は呼び出されず、レスポンスヘッダーは設定されません。
or
シグネチャ: or(arg, ...) : Boolean
OR 論理演算子を実行します。いずれかの引数が true と評価されると、ショートサーキット評価が停止し、残りの引数はスキップされます。
パラメーター: 任意の型の 1 つ以上の値。
戻り値: いずれかの値が true と評価される場合、true。すべての値が false と評価される場合、false。
例: From ヘッダーの値に基づいてリクエストをリダイレクトします。
if and($http_from, or(eq($http_from, 'wap'), eq($http_from, 'comos'))) {
rewrite(concat('http://example.com.cn/zt_d/we2015/', $http_from), 'enhance_redirect')
}「
From」ヘッダーが「wap」または「comos」の場合、リクエストは(HTTP 302)で「http://example.com.cn/zt_d/we2015/[wap|comos]」にリダイレクトされます。Fromヘッダーがwapの場合、or()は直ちにtrueを返します —comosチェックはスキップされます。
not
シグネチャ: not(arg) : Boolean
NOT 論理演算子を実行します。undef と false の値は false と評価され、その他の値は true と評価されます。
パラメーター: 任意の型の厳密に 1 つの値。
戻り値: true または false。
例: 必須パラメーターまたは Cookie が不足しているリクエストをブロックします。
if not($arg_key) {
exit(403)
}
if not($cookie_user) {
exit(403, 'not cookie user')
}
if not(0) {
exit(403)
}
if not(false) {
exit(403)
}not($arg_key)— リクエストにkeyクエリパラメーターがない場合、$arg_keyはundefです。not(undef)はtrueを返し、リクエストは HTTP 403 で終了します。not($cookie_user)— リクエストにcookie_userクッキーがない場合、$cookie_userはundefになります。not(undef)はtrueを返し、リクエストは本文がnot cookie userの HTTP 403 で終了します。not(0)—falseを返します。このブロックは実行されません。not(false)—falseは偽値であるため、not(false)はtrueを返します。このブロックは実行され、HTTP 403 で終了します。
eq
シグネチャ: eq(arg1: any, arg2: same type as arg1) : Boolean
2 つの値が等しいかどうかを比較します。
パラメーター:
arg1: 最初の値。データの型: 任意。arg2: 2 番目の値。データの型:arg1と同じ。
戻り値: 2 つの値が等しい場合、true。それ以外の場合、false。
例: 次の例では、and() 呼び出し内で eq と ne を組み合わせています。詳細については、ne セクションをご参照ください。
key1 = 'value1'
key2 = 'value2'
if and($arg_k1, $arg_k2, eq(key1, $arg_k1), ne(key2, $arg_k2)) {
say('match condition')
}ne
シグネチャ: ne(arg1: any, arg2: same type as arg1) : Boolean
2 つの値が等しくないかどうかを比較します。
パラメーター:
arg1: 最初の値。データの型: 任意。arg2: 2 番目の値。データの型:arg1と同じ。
戻り値: 2 つの値が等しくない場合、true。それ以外の場合、false。
例: 両方のクエリパラメーターが存在し、特定の値条件を満たす場合にのみ、リクエストを一致させます。
key1 = 'value1'
key2 = 'value2'
if and($arg_k1, $arg_k2, eq(key1, $arg_k1), ne(key2, $arg_k2)) {
say('match condition')
}本文が実行されるには、4 つすべての条件が true である必要があります。
リクエストに
k1パラメーターが含まれていること。リクエストに
k2パラメーターが含まれていること。k1の値はvalue1です (eqでチェック) 。k2の値はvalue2と等しくありません (neでチェックされます)。
リクエストに k1 または k2 が不足している場合、ショートサーキット評価はステップ 1 または 2 で停止し、eq() も ne() も呼び出されません。
null
シグネチャ: null(v: array | dictionary | string) : Boolean
EdgeScript (ES) にデータの型が指定されているかどうかをチェックします。
パラメーター: v — 配列、辞書、または文字列。その他のデータの型を渡すと、false が返されます。
戻り値: ブール値。
true—vが空の文字列、または要素のない配列またはディクショナリである場合。false—vが空でない文字列、空でない配列またはディクショナリ、またはその他のデータの型である場合。
例:
d = []
say(null(d))
set(d, 1, 'v1')
say(null(d))
say(tostring(null('x')))
say(tostring(null('')))出力:
true
false
false
true空の配列
[]に対するnull(d)はtrueを返します。set(d, 1, 'v1')の後、配列は空ではないため、null(d)はfalseを返します。null('x')— 空でない文字列 — はfalseを返します。null('')— 空の文字列 — はtrueを返します。