# HTTP 規則表示式建置器

請利用子表示式建置器，透過 AND、OR、NOT 和括弧分組，從子表示式建置複式規則條件。 規則建置器會在您套用變更時驗證規則，並在括弧不對稱及邏輯運算子不受支援時發出警示。

如果要檢視這個管理主控台頁面，請按一下伺服器 > 伺服器類型 > 隨需應變路由器 > ODR > 隨需應變路由器內容 > 遞送原則 HTTP 規則 > 新增 > 子表示式建置器。

如果要利用規則建置器來修改規則，您必須有管理者的管理專用權。

## 選取運算元

### 遞送及服務原則運算元

依所選的通訊協定而定，會顯示不同的運算元。下表包括主控台所顯示的運算元名稱、將出現在表示式中的實際運算元、每個運算元的有效通訊協定，以及每個運算元的說明。

表 1. 運算元
要求變數 | 有效的通訊協定 | 說明
--- | --- | ---
`application` | IIOP | EJB 所在「企業應用程式」的名稱。
`clienthost` | HTTP SOAP IIOP SIP | 完整的用戶端主機名稱。這是網際網路通訊協定 (IP) 指令主機名稱的值。此運算元不支援 `>、>=、<、<=` 等數值運算子。
`clientport` | IIOP | 用戶端埠名稱。
`clientipv4` | HTTP SOAP SIP | 用戶端電腦的 IP 位址，使用「網際網路通訊協定」第 4 版 (IPv4) 帶點四段式位址類型 `n.n.n.n`。
`clientipv6` | HTTP SOAP SIP | 「網際網路通訊協定」第 6 版 (IPv6) 128 位元位址類型 `x:x:x:x:x:x:x:x`，遵循用戶端電腦的「意見請求 1924 (RFC 1924)」。
`Contact header` | SIP | 「聯絡」標頭欄位。
`Contact URI` | SIP | 「聯絡」標頭欄位中的 URI。
`cookie$<name>` | HTTP SOAP | Cookie 名稱。例如，`cookie$My_Cookie_Name='My_Cookie_Value'` 表示式會測試要求，以瞭解它是否包含名稱為 `My_Cookie_Name`、值為 `My_Cookie_Value` 的 Cookie。如果要測試特定 Cookie 是否存在，請使用下列其中一個表示式：
    cookie$MyCookieName IS NOT NULL
    cookie$MyCookieName IS NULL
`ejbmodule` | IIOP | EJB 的模組名稱。
`ejbname` | IIOP | EJB 的名稱。
`ejbmethod` | IIOP | EJB 內的方法名稱。
`From header` | SIP | 「來源」標頭欄位。
`From header display name` | SIP | 「來源」標頭欄位中的顯示名稱。
`From URI` | SIP | 「來源」標頭欄位中的 URI。
`From URI host` | SIP | 「來源」標頭欄位中的主機。
`From URI port` | SIP | 「來源」標頭欄位中的 URI 埠。
`From URI user` | SIP | 「來源」標頭欄位中的使用者。
`header$<name>` | HTTP SOAP SIP | 標頭名稱和值。例如，`header$Host='localhost'` 表示式會測試要求，以瞭解它是否包含值為 `localhost` 的 HTTP 主機標頭。如果要測試主機標頭是否存在，請使用下列其中一個表示式：
    header$Host IS NOT NULL
    header$Host IS NULL
`HTTPMethod` | HTTP SOAP | 要求的 HTTP 方法。可能的值如下：POST、GET、PUT 和 DELETE。
`MIMEType` | HTTP SOAP | 要求的 MIME 類型。
`operation` | SOAP | Web 服務作業的名稱。
`percentage$<val>` | HTTP SOAP IIOP SIP | 對於時間的固定百分比，percentage 運算元求值為 `true`。例如，對於時間平均值 50%，`percentage$50` 求值為 `true`。
`port` | HTTP SOAP IIOP SIP | 收到要求的接聽埠。
`protocol` | HTTP SOAP | 傳輸要求的通訊協定。目前支援的通訊協定如下：HTTP、HTTPS、SOAP 和 SOAPS。
`queryparm$<name>` | HTTP SOAP | 標頭名稱和值。例如，`queryparm$timezone='EST'` 表示式會測試要求，以瞭解要求是否包含名稱為 `timezone`、值為 `EST` 的 HTTP 查詢參數。如果要測試查詢參數是否存在，請使用下列其中一種格式：
    queryparm$timezone IS NOT NULL
    queryparm$timezone IS NULL
`rampup$<startTime>$<completionTime>` | HTTP SOAP IIOP SIP | 對於時間的可變百分比，rampup 運算元求值為 `true`。如果在 `<startTime>` 之前，則 rampup 運算元一律求值為 `false`；如果在 `<completionTime>` 之後，則 rampup 運算元一律求值為 `true`。當時間以線性遞增百分比從 `<startTime>` 進展到 `<completionTime>` 時，rampup 運算元將求值為 `true`。 `<startTime>` 及 `<completionTime>` 的格式是 `day/month/year::hour:min:sec`。 其中，day 是月份中的日期，month 是十二個月份之一：Jan、Feb、Mar、Apr、May、Jun、Jul、Aug、Sep、Oct、Nov、Dec，year 是 4 位數年份，hour 是 24 小時表示法的 2 位數小時，而 min 及 sec 分別是表示分鐘及秒鐘的 2 位數值。 例如， `rampup$01/Jan/2007::08:00:00$01/Jan/2007::17:00:00` 在 2007 年 1 月 1 日上午 8 點開始時，偶而求值為 `true`，但在同一天的加速完成時間下午 5 點，一律求值為 `true`。
`Request transport` | SIP | 要求的傳輸。
`Request URI` | SIP | 要求 URI。
`Request URI host` | SIP | 要求 URI 主機。
`Request URI port` | SIP | 要求 URI 埠。
`Request URI user` | SIP | 要求 URI 使用者。
`Scheme of From header` | SIP | 「來源」標頭欄位中的架構。
`Scheme of To header` | SIP | 「目標」標頭欄位中的架構。
`Scheme of URI` | SIP | URI 架構。
`serverhost` | HTTP SOAP IIOP SIP | 伺服器的完整主機名稱。此運算元不支援 `>、>=、<、<=` 等數值運算子。
`serveripv4` | HTTP SOAP SIP | 伺服器電腦的 IP 位址，使用 IPv4 帶點四段式位址類型 `n.n.n.n`。
`serveripv6` | HTTP SOAP SIP | IPv6 128 位元位址類型 `x:x:x:x:x:x:x:x`，遵循伺服器電腦的 RFC 1924。
`service` | SOAP | Web 服務的名稱。
`SIP method` | SIP | 要求的 SIP 方法。可能的值如下：INVITE、TRYING、RINGING、ACK、OK 及 BYE。如果訊息不是要求，則此運算元傳回空值。
`SIP response code` | SIP | 回應的回應碼。如果訊息不是回應，則此運算元傳回 -1。
`time` | HTTP SOAP IIOP | 此運算元是用來定義必須允許使用給定要求的日期和時間。兩個選用欄位是「開始時間」和「結束時間」。如果在所定義時間間隔之外收到要求，則要求不會加以處理。 「開始時間」和「結束時間」欄位皆使用下列格式：`dayOfWeek/dayOfMonth/month/year::hour:minute:second`。 例如，2007 年 4 月 11 日星期四下午 1 點 3 分 45 秒指定為： Thu/11/Apr/2007::13:03:45 任何欄位都可以在值中使用萬用字元 *。例如，每月的第一天可指定為 */1。 dayofWeek 值是 Sun、Mon、Tue、Wed、Thu、Fri、Sat，而 dayOfMonth 值的範圍是 1 到 31。 month 值是非數值，代表十二個月份：Jan、Feb、Mar、Apr、May、Jun、Jul、Aug、Sep、Oct、Nov、Dec。 year 值是由年份的四位數字組成。例如，2007。 hour 值是當日時刻，24 小時表示法。例如，上午 8 點表示為 ::8。minute 和 second 是範圍 0 到 59 的整數。 正斜線 (/) 是用來分開日期參數，雙冒號 (::) 是用來分開日期和時間值，冒號 (:) 是用來分開日期時間參數。 請注意，它是使用 time 運算元的整個規則 Boolean 結果，判定要採取的遞送動作。
`To client host` | SIP | 「目標」標頭欄位中的用戶端主機。
`To header` | SIP | 「目標」標頭欄位。
`To header display name` | SIP | 「目標」標頭欄位中的顯示名稱。
`To URI` | SIP | 「目標」標頭欄位中的 URI。
`To URI host` | SIP | 「目標」標頭欄位中的 URI 埠。
`To URI user` | SIP | 「目標」標頭欄位中的使用者。
`virtual host` | HTTP SOAP | 虛擬入口網站是在 WebSphere® Portal Server 之內建立的，WebSphere Extended Deployment 支援這個運算元，以便能夠更妥善地整合 WebSphere Portal Server。虛擬埠是要求 URL 減去 WebSphere Portal 應用程式 Web 模組的環境定義根目錄。如果給定的要求符合定義的虛擬入口網站，則採用定義給此規則的遞送動作。
`xpathexpr` | SOAP | XPath 字串表示式有一個用來包含 XPath 表示式的必要欄位，以及一個用來定義本端名稱空間的選用欄位。如果 XPath 表示式所包含的名稱空間都是標準名稱空間，便可能選用第二個欄位。如果有多個本端名稱空間，請用逗點 (,) 來分開各個名稱空間。以下是含有一個本端名稱空間定義的 xpathexpr 範例：
    xpathexpr$/soap:Envelope/soap:Body/m:getTimeZone/n:clientId$m\\=http://test.classify.ws.ibm.com,n\\=http://test2.classify.ws.ibm.com
    = \\'1000\\' or operation IS NOT NULL
在前一個表示式中，XPath 表示式是 `/soap:Envelope/soap:Body/n:getTimeZone/n:clientId`。它包含本端名稱空間 `n`。因此，xpathexpr 的第二個欄位定義為 `n \\=http://test.classify.ws.ibm.com`。錢幣符號 ($) 是用來表示欄位定義的開始。雙反斜線在本範例中是 ESC 序列。第一個等號 (=) 已轉義，因為它是本端名稱空間定義的一部分，而第二個等號 (=) 是分類表示式中的運算子，因此不能轉義。 以下是含有兩個本端名稱空間的 xpathexpr 範例：
    xpathexpr$/soap:Envelope/soap:Body/m:getTimeZone/n:clientId$m\\=http://test.classify.ws.ibm.com,n\\=http://test2.classify.ws.ibm.com
    = \\'1000\\' or operation IS NOT NULL
以下是 xpathexpr 的標準名稱空間清單：
表 1. 名稱空間
名稱空間 | URL
--- | ---
soap | http://schemas.xmlsoap.org/soap/envelope/
soap-env | http://schemas.xmlsoap.org/soap/envelope/
soapenc | http://schemas.xmlsoap.org/soap/encoding/
soapbind | http://schemas.xmlsoap.org/wsdl/soap/
xsd | http://www.w3.org/2001/XMLSchema
xsi | http://www.w3.org/2001/XMLSchema-instance
xsi | http://ws-i.org/schemas/conformanceClaim/
wsdl | http://schemas.xmlsoap.org/wsdl/

## 操作員

- = 相等運算子表示區分大小寫的相符項目。
- <> 不等於運算子表示運算元值不等於您輸入的值。
- > 大於運算子用於數字。
- >= 大於或等於運算子用於數字。
- < 小於運算子用於數字。
- <= 小於或等於運算子用於數字。
- AND：對 `xx` AND `yy`, 而言，表示同時包含 `xx` 和 `yy` 的相符項目。
- BETWEEN：這個運算子用來搭配 AND，以選取包含第一個值（或低值）到最後一個值（或高值）的值範圍。它們一起運作於數字和日期。
- EXISTS：這個布林運算子會檢查運算元或複合子表示式的結果，例如，當檢查某些 HTTP 標頭元素屬性時，便是如此。
- IN：這個運算子表示在單一表示式中有多個值的運算元。例如，對於稱為 `port` 的運算元，如果您要表示埠值可以是 `9080`、`9090`、`9091` 之類值的任何一項或全部，表示式片段便是 `port IN (9080,9090,9091)`。方括弧內的值之表示方式視埠的資料類型而定。如果埠是整數，則正確的語法是沒有引號的值。如果埠是字串，則正確的語法是 `port IN (‘9080’, ‘9090’, ‘9091’)`。
- IS NULL：這個運算子表示查詢的驗證作業顯示所要求的參數不存在。
- IS NOT NULL：這個運算子表示查詢的驗證作業顯示所要求的參數存在。
- LIKE：這個運算子表示字串運算元值的型樣比對。此值必須在型樣比對的根目錄位置中，包含百分比符號 (%) 萬用字元。例如，表示式 `host LIKE %blanca` 會符合 blanca 一字或是結尾為 blanca 的其他任何單字，表示式 `host LIKE blanca%` 會符合 blanca 一字或是開頭為 blanca 的其他任何單字，而表示式 `host LIKE %blanca%` 則會符合 blanca 一字或是其中內嵌 blanca 的其他任何單字。
- NOT：對 NOT `xx` 而言，這個運算子表示不包含 `xx` 的相符項目。
- OR：對 `xx` OR `yy` 而言，這個運算子表示包含 `xx` 或 `yy` 的相符項目。

## 值

請依所選的運算子，輸入選擇要建立之子表示式的值。

## 產生子表示式

產生子表示式作為所指定運算元、運算子和值的結果。

## 附加

請按一下這裡，在規則畫面上附加到此框。

相關資訊：
遞送原則 HTTP 規則

檔名：http_rulebuilder_detail.html