Sun Java System Portal Server Secure Remote Access 7.2 管理指南

定義以語言為基礎的規則

規則以下列語言為基礎:

HTML 內容的規則

可進一步將網頁上的 HTML 內容分類為屬性、表單或 Applet。同樣地,HTML 內容的規則可分類為:

HTML 內容的屬性規則

此規則可識別需重新寫入值的標籤屬性。屬性值可為簡單的 URL、JavaScript 或 DHTML 內容。例如:

此部分說明下列內容:

屬性規則語法

<Attribute name="attributeName" [tag="*" valuePatterns="" source="*" type="URL|DHTML|DJS"]/>

其中,

attributeName 為屬性名稱 (必須的)

tag 是屬性所屬的標籤 (可選,預設為 *,表示任何標籤)

valuePatterns 請參閱在規則中與式樣相符

source 指定定義此屬性的頁面的 URI (可選,預設為 *,表示在任何頁面中)

type 指定值的類型 (可選)。類型可能是:

URL - 簡單 URL (預設值)。

DHMTL - DHTML 內容。此類內容會以標準 HTML 內容的形式顯示,而且用於 Microsoft HTC 格式的檔案。

DJS - JavaScript 內容。所有 HTML 事件處理器,如 onClick 與 onMouseover,其 JavaScript 皆含有 HTML 屬性。

屬性規則範例

假設此網頁的基準 URL 是:

http://mymachine.intranet.com/mypage.html

網頁內容:

<a href="http://mymachine.intranet.com/mypage.html">

規則

<Attribute name="href"/>
或者
<Attribute name="href" tag="a"/>

輸出

<a href=gateway-URL/http://mymachine.intranet.com/myhome.html>

描述

因為待重新寫入的 URL 已經是一個絕對 URL,因此只會將閘道 URL 前置於此 URL。

DJS 屬性範例

假設此網頁的基準 URL 是:

http://abc.sesta.com/focus.html

網頁內容:

<Form>

<input TYPE=TEXT SIZE=20 value=focus onClick="Check(\q/focus.html\q,\qfocus\q);return;">

</Form>

規則

<Attribute name="onClick" type="DJS"/>
<Function type="URL" name="Check" paramPatterns="y,"/>

輸出

<Form>

<INPUT TYPE=TEXT SIZE=20 value=focus onClick="Check(\q
gateway-URL
/http://abc.sesta.com/focus.html\q,\qfocus\q);return;">

</Form>

描述

重新寫入特定網頁內容需要兩個規則。第一個規則可識別 onClick JavaScript 記號。第二個規則可識別需重新寫入的 check 函數參數。在這種情況下,僅會重新寫入第一個參數,因為 paramPatterns 用值 y 取代了第一個參數。

出現 JavaScript 記號的閘道 URL 與網頁的基準 URL 會置於所需參數之前。

用於 HTML 內容的表單規則

使用者所瀏覽的 HTML 網頁可能包含表單。某些表單元素可能會將 URL 視為值。

本節分為下列部分:

表單規則語法

<Form name="form1" field="visit" [valuePatterns="" source="*"]/>

其中

name 為表單名稱 (必須的)

field 是表單中的欄位,需要重新寫入它的值 (必須的)

valuePatterns 請參閱在規則中與式樣相符

source 是 html 網頁的 URL,即呈現此表單定義之處 (可選,預設為 *,表示在任何網頁中)

表單規則範例

假設此網頁的基準 URL 是:

http://test.siroe.com/testcases/html/form.html

網頁內容

假設網頁的 URI 是 form.html 且位於伺服器的根目錄中。

<form name=form1  method=POST action=
"http://test.siroe.com/testcases/html/form.html">
<input type=hidden name=abc1 value="0|1234|/test.html">
</form>

要重新寫入出現在 form1 中名為 abc1 的隱藏欄位值中的 /text.html,需要下列規則。

規則

<Form source="*/form.html" name="form1" 
field="abc1" valuePatterns="0|1234|"/>
<Attribute name="action"/>

輸出

<FORM name="form1" 
method="POST" action="gateway-URL/
http://test.siroe.com/testcases/html/form.html">
<input type=hidden name=abc1 
value="0|1234|gateway-URL/
http://test.siroe.com/test.html">
</FORM>

描述

action 標記是使用某些已定義之 HTML 屬性規則所重新寫入的。

輸入標記屬性值的 value 的重新寫入方式如輸出中所示。已找出特定的 valuePatterns,然後即利用前置閘道 URL 及網頁的基準 URL 來重新寫入符合的 valuePatterns 後面的所有內容。請參閱在規則中與式樣相符

用於 HTML 內容的 Applet 規則

單一網頁可以包含許多 Applet,而每個 Applet 則可以包含許多參數。Rewriter 會利用 Applet 的 HTML 定義與規則中指定的值相符,然後修改作為 Applet 參數定義一部分呈現的 URL 值。此取代動作會在伺服器上進行,而非在使用者瀏覽特定網頁時進行。此規則可識別並重新寫入 HTML 內容中的 Applet 及物件標籤的參數。

本節分為下列部分:

Applet 規則語法

<Applet code="ApplicationClassName/ObjectID
" param="parametername" [valuePatterns="" source="*"] />

其中

code 是 Applet 或物件類別的名稱 (必須的)

param 是值需要重新寫入的參數的名稱 (必須的)

valuePatterns 請參閱在規則中與式樣相符

source 是包含 Applet 定義的網頁的 URL (可選,預設為 *,表示在任何網頁中)

Applet 規則範例

假設此網頁的基準 URL 是:

http://abc.siroe.com/casestudy/test/HTML/applet/rule1.html

網頁內容:

<applet codebase="appletcode" code="
RewriteURLinApplet.class" archive="/test.jar">
<param name=Test1 value="/index.html">
</applet>

規則

<Applet source="*/rule1.html" code=
"RewriteURLin*.class" param="Test*"/>

輸出

<APPLET codebase="gateway-URL
/http://abc.siroe.com/casestudy/test/HTML/
applet/appletcode" code="RewriteURLinApplet.class"
 archive="/test.jar"><param name="Test1" value="
gateway-URL/http:
//abc.siroe.com/index.html">
</APPLET>

描述

將重新寫入 codebase 屬性,因為 <Attribute name="codebase"/>default_gateway_ruleset 中已定義的規則。

所有以 Test 開頭的參數都會被重新寫入。顯示 Applet 碼的網頁基準 URL 及閘道 URL 都會置於 params 標籤的 value 屬性之前。

在規則中與式樣相符

您可以使用 valuePatterns 欄位來與式樣相符,並識別需重新寫入之陳述式的特定部分。

若您指定 valuePatterns 作為規則的一部分,則會重新寫入所有位於符合之樣式後的內容。

請參考下列表單規則範例。

<Form source="*/source.html
" name="form1" field="visit
" [valuePatterns="0|1234|"]/>

其中

source 是顯示表單之 Html 網頁的 URL。

name 為表單名稱。

field 是表單中的欄位,需要重新寫入它的值。

valuePatterns 指出需重新寫入的字串部分。會重新寫入所有出現在 valuePatterns 之後的內容 (可選,預設為 "",表示需重新寫入完整值)

以 valuePatterns 格式指定特殊化字元

您可以透過以反斜線退出特殊化字元的方式來指定它們。例如:

<Form source="*/source.html " name="form1" field=" visit" [valuePatterns="0|1234| \\;original text|changed text"]/>

在 valuePatterns 中使用萬用字元

您可使用萬用字元星號 (*) 字元來完成用於重新寫入的式樣相符。

valuePatterns 欄位中,您不能僅指定一個 *。因為 * 表示包含所有文字的符合結果,這樣 valuePattern 後沒有文字。因此,Rewriter 沒有可重新寫入的文字。您必須利用其他字串與 * 連用,如 *abc。在這種情況下,即會重新寫入所有位於 *abc 之後的內容。


備註 –

規則中的任何欄位皆可使用萬用字元星號 (*)。但是規則中所有的欄位不能都包含 *。若所有欄位皆包含 *,則會忽略此規則。不會顯示任何的錯誤訊息。


您可以利用 * 或 ** 與顯示在原始陳述式中的分隔字元 (分號或逗號) 連用,以分隔多個欄位。一個星號 (*) 會與所有不需重新寫入的欄位相符,而兩個星號 (**) 則會與所有需重新寫入的欄位相符。

在 valuePatterns 中使用萬用字元列出 * 萬用字元的某些用法範例。

表 4–1 * 萬用字元的使用範例

URL 

valuePatterns 

描述 

url1, url2, url3, url4

valuePatterns = "**, *, **, *"

會重新寫入 url1url3,因為 ** 會指出待重新寫入的部分

XYZABChttp://host1.sesta.com/dir1.html

valuePatterns = "*ABC"

僅會重新寫入 http://host1.sesta.com/dir1.html 部分。所有位於 *ABC 之後的項目皆需重新寫入。

"0|dir1|dir2|dir3|dir4|test|url1

valuePatterns = "*|*|**|*|**|*|"

會重新寫入 dir2dir4url1。需重新寫入的最後一個欄位不必以 ** 表示。

JavaScript 內容的規則

JavaScript 可在多個位置包含 URL。Rewriter 無法直接剖析 JavaScript 與確定 URL 部分。必須撰寫特定規則集以協助 JavaScript 處理器識別及轉譯 URL。

具有 URL 類型的 JavaScript 元素分類如下:

變數

變數的一般語法是:

<Variable name="variableName" [type="URL|EXPRESSION|DHTML|DJS|SYSTEM" source="*"]>

視其所持有的值類型而定,JavaScript 變數可細分為 5 種:

URL 變數

變數值是一個可視為 URL 的簡單字串。

本節分為下列部分:

URL 變數語法

<Variable name="variableName" type="URL" [source="*"]>

其中

variableName 為變數名稱。將會重新寫入 variableName 的值 (必須的)

type 為 URL 變數 (必須的,且值必須為 URL)

source 是此 JavaScript 變數所在的網頁的 URI (可選,預設為 *,表示在任何網頁中)

URL 變數範例

假設基準 URL 是:

http://abc.siroe.com/tmp/page.html

網頁內容

<script LANGUAGE="Javascript">
<!--
//URL Variables
var imgsrc1="/tmp/tmp.jpg";
var imgsrc2="http://srap.sesta.com/tmp/tmp.jpg";
var imgsrc3=imgsrc2;
//-->
</SCRIPT>

規則

<Variable name="imgsrc*" type="URL"/>

輸出

<script LANGUAGE="Javascript">
<!--
//URL Variables
var imgsrc="gateway-URL/http://abc.siroe.com/tmp/tmp.jpg";
var imgsrc="gateway-URL/http://srap.sesta.com/tmp/tmp.jpg";
var imgsrc3=imgsrc2;
//-->
</SCRIPT>

描述

所有 URL 類型的變數及名稱以 imgsrc 開頭的變數皆會被重新寫入。在輸出的第一行,會前置顯示變數的閘道 URL 與網頁 URL。第二行已包含絕對路徑,因此僅會前置閘道 URL。第三行 var imagsrc2 將不會重新寫入,因為其值並非字串,而是另一個 JavaScript 值。

EXPRESSION 變數

EXPRESSION 變數的右側會有一個表示式。此表示式會產生一個 URL。Rewriter 會將 JavaScript 函數 (psSRAPRewriter_convert_expression) 附加至 HTML 網頁,因為其無法在伺服器上計算這類表示式的值。此函數會將表示式視為參數,並在用戶端瀏覽器中計算所需 URL 值。

若您不確定陳述式包含的是簡單 URL 或 EXPRESSION URL,請使用 EXPRESSION 規則,因為其可處理兩種情況。

本節分為下列部分:

EXPRESSION 變數語法

<Variable name="variableName" [type="EXPRESSION" source="*"]/>

其中

variableName 是 JavaScript 變數的名稱,其值為表示式 (必須的)

type 是 JavaScript 變數的類型 (可選,預設為 EXPRESSION)

source 是網頁的 URI (可選,預設為 *,表示任何來源)

EXPRESSION 變數範例

假設此網頁的基準 URL 是:

http://abc.siroe.com/dir1/dir2/page.html

網頁內容

<script LANGUAGE="Javascript">
<!--
//Expression variables
var expvar= getURIPreFix() + "../../images/graphics"+".gif";
document.write("<A HREF="+expvar+">Link to XYZ content</A><P>")
var expvar="../../images/graphics"+".gif";
//-->
</SCRIPT>

規則

<Variable name="expvar" type="EXPRESSION"/>
或者
<Variable name="expvar"/>

輸出

var expvar=psSRAPRewriter_convert_expression(getURIPreFix()
 + "../../images/graphics"+".gif");document.write("<a href="+expvar+">>
Link to XYZ content</A><P>")var expvar="gateway-URL/http://abc.siroe.com/images/graphics"+".gif";

描述

psSRAPRewriter_convert_expression 函數會前置於第一行表示式變數 expvar 的右側之前。此函數可處理表示式,並於執行時間重新寫入內容。在第三行中,此值將被重新寫入為簡單 URL。

DHTML (動態 HTML) 變數

這些是含有 HTML 內容的 JavaScript 變數。

本節分為下列部分:

DHTML 語法

<Variable name="variableName" type="DHTML" [source="*"]/>

其中

variableName 是含有 DHTML 內容的 JavaScript 變數的名稱 (必須的)

type 是變數的類型 (必須的,此值必須為 DHTML)

source 是網頁的 URL (可選,預設為 *,表示在任何網頁中)

DHTML 範例

假設此網頁的基準 URL 是:

http://abc.sesta.com/graphics/set1/
graphics/jsscript/JSVAR/page.html

網頁內容

<script LANGUAGE="Javascript">
<!--
//DHTML Var
var dhtmlVar="<a href=../../images/test.html>"
var dhtmlVar="<a href=/images/test.html>"
var dhtmlVar="<a href=images/test.html>"
//-->
</SCRIPT>

規則

<Variable name="dhtmlVar" type="DHTML"/>
<Attribute name="href"/>
或者
<Attribute name="href" tag="a"/>

輸出

<script LANGUAGE="Javascript">
<!--
//DHTML Var
var dhtmlVar="<a href=gateway-URL
/http://abc.sesta.com/graphics/
set1/graphics/images/test.html>"
var dhtmlVar="<a href=gateway-URL/
http
://abc.sesta.com/images/test.html>"
var dhtmlVar="<a href=gateway-URL/
http://abc.sesta.com/graphics/set1/
graphics/jscript/JSVAR/images/test.html>"
//--></SCRIPT>

描述

JavaScript 剖析器會讀取 dhtmlVar 的值作為 HTML 內容,並經由 HTML 剖析器傳送內容。HTML 剖析器會套用符合 href 屬性規則的 HTML 規則,因此 URL 會被重新寫入。

DJS (動態 JavaScript) 變數

這些是含有 JavaScript 內容的 JavaScript 變數。

本節分為下列部分:

DJS 語法

<Variable name="variableName" type="DJS" [source="*"]/>

其中

variable 是 JavaScript 變數,其值為 javascript。

DJS 範例

假設此網頁的基準 URL 是:

http://abc.sesta.com/dir1/dir2/dir3/jscript/dir4/page.html

網頁內容

//DJS Var
var dJSVar="var dJSimgsrc=\q/tmp/tmp.jpg\q;"
var dJSVar="var dJSimgsrc=\q../tmp/tmp.jpg\q;"
var dJSVar="var dJSimgsrc=
\qhttp://abc.sesta.com/tmp/tmp.jpg\q;"

規則

<Variable name="DJS">dJSVar/>
<Variable name="URL">dJSimgsrc/>

輸出

//DJS Var - need 2 rules
var dJSVar="var dJSimgsrc=\qgateway-URL
/http://abc.sesta.com/tmp/tmp.jpg\q;"var dJSVar="var dJSimgsrc=\q
gateway-URL/http
://abc.sesta.com/dir1/dir2/dir3/jscript/tmp/tmp.jpg\q;"
var dJSVar="var dJSimgsrc=\qgateway-URL/
http://abc.sesta.com/tmp/tmp.jpg\q;"

描述

此處必須使用兩個規則。第一個規則可找到動態 JavaScript 變數 dJSVar。此變數的值仍然是 URL 類型的 JavaScript。套用第二個規則來重新寫入此 JavaScript 變數的值。

SYSTEM 變數

這些變數並非由使用者公佈且支援有限。這些變數可用作 JavaScript 標準的一部分。例如,window.location.pathname

本節分為下列部分:

SYSTEM 變數語法

<Variable name="variableName" type="SYSTEM" [source="*"]/>

其中

variableName 是 JavaScript 系統變數 (必須的,其值可能是與下列式樣相符的值:document.URL、document.domain、location、doument.location、location.pathname、location.href、location.protocol、location.hostname、location.host 與 location.port。所有這些都會位於 generic_ruleset 中。請勿修改這些系統變數規則。)

type 指定系統類型值 (必須的,且值為 DJS)

source 是此網頁的 URI (可選,預設為 *,表示在任何網頁中)

SYSTEM 變數範例

假設此網頁的基準 URL 是:

http://abc.siroe.com/dir1/page.html

網頁內容

<script LANGUAGE="Javascript">
<!--
//SYSTEM Var
alert(window.location.pathname);
//-->
</SCRIPT>

規則

<Variable name="window.location.pathname" type="SYSTEM"/>

輸出

</SCRIPT>
<SCRIPT LANGUAGE="Javascript">
<!--
//SYSTEM Var
alert(psSRAPRewriter_convert_pathname(window.location.pathname));
//-->
</SCRIPT>

描述

Rewriter 會找出與規則相符的系統變數,然後前置 psSRAPRewriter_convert_system 函數。此函數可在執行時間中處理系統變數,然後相應重新寫入結果 URL。

函數引數

需重新寫入其值的函數參數可分為 4 類:

通用語法

<Function name="functionName " paramPatterns="y,y," [type="URL|EXPRESSION|DHTML|DJS" source="*"]/>

其中

name 是 JavaScript 函數的名稱 (必須的)

paramPatterns 指出需重新寫入的參數 (必須的)

y y 的位置會指出需重新寫入的參數。例如,在此語法中,需要重新寫入第一個參數,但第二個參數則不應重新寫入

type 指出此參數所需的值種類 (可選,預設為 EXPRESSION 類型)

source 網頁源 URI (可選,預設為 *,表示在任何網頁中)

URL 參數

函數會將參數視為字串,而此字串則可視為 URL。

本節分為下列部分:

URL 參數語法

<Function name="functionName" paramPatterns="y,," type="URL" [source="*"]/>

其中

name 是含有 URL 類型參數的函數名稱 (必須的)

paramPatterns 指出需重新寫入的參數 (必須的)

y y 的位置會指出需重新寫入的參數。例如,在此語法中,需要重新寫入第一個參數,但第二個參數則不應重新寫入

type 是函數的類型 (必須的,此值必須為 URL)

source 是具有此函數呼叫之網頁的 URL (可選,預設為 *,表示在任何 URL 中)

URL 參數範例

假設此網頁的基準 URL 是:

http://abc.sesta.com/test/rewriter/test1/jscript/test2/page.html

網頁內容

<script language="JavaScript">
<!--
function test(one,two,three){
alert(one + "##" + two + "##" +three);
}
test("/test.html","../test.html","123");
window.open("/index.html","gen",width=500,height=500);
//-->
</SCRIPT>

規則

<Function name="URL" name="test" paramPatterns="y,y,"/>
<Function name="URL" name="window.open" paramPatterns="y,,,"/>

輸出

<SCRIPT language="JavaScript">
<!--
function test(one,two,three) {
alert(one + "##" + two + "##" +three);
}
test("gateway-URL/http://abc.sesta.com/test.html","
gateway-URL/http://abc.sesta.com/test/rewriter/
test1/jscript/test.html","123");window.open("gateway-URL/
http://abc.sesta.com/index.html","gen",width=500,height=500);
//-->
</SCRIPT>

描述

第一個規則指出名稱為 test 的函數中前兩個參數需要重新寫入。因此會重新寫入 test 函數的前兩個參數。第二個規則指出 window.open 函數的第一個參數需要重新寫入。window.open 函數中的 URL 會前置含有函數參數的網頁的閘道 URL 及基準 URL。

EXPRESSION 參數

這些參數採用表示式值,即 URL 中的計算結果。

本節分為下列部分:

EXPRESSION 參數語法

<Function name="functionName" paramPatterns="y" [type="EXPRESSION" source="*"]/>

其中

name 為函數名稱 (必須的)

paramPatterns 指出需重新寫入的參數 (必須的)

y y 的位置會指出需重新寫入的函數參數。上列語法中,僅會重新寫入第一個參數

type 指定 EXPRESSION 值 (可選)

source 是呼叫此函數的網頁的 URI

EXPRESSION 參數範例

假設此網頁的基準 URL 是:

http://abc.sesta.com/dir1/dir2/page.html

網頁內容

<script language="JavaScript">
<!--
function jstest2(){
return ".html";
}
function jstest1(one){
return one;
}
var dir="/images/test"
var test1=jstest1(dir+"/test"+jstest2());
document.write("<a HREF="+test1+">TEST</a>");
alert(test1);
//-->
</SCRIPT>

規則

<Function type="EXPRESSION" name="jstest1" paramPatterns="y"/>
或者
<Function name="jstest1" paramPatterns="y"/>

輸出

<script language="JavaScript">
<!--
function jstest2(){
return ".html";
}
function jstest1(one){
return one;
}
var dir="/images/test"
var test1=jstest1(psSRAPRewriter_convert_expression(dir+"/test"+jstest2()));
document.write("<a HREF="+test1+">TEST</a>");
alert(test1);
//-->
</SCRIPT>

描述

規則將 jstest1 函數的第一個參數視為 EXPRESSION 函數參數,從而指定此參數需要重新寫入。在網頁內容範例中,第一個參數是僅在執行時間中計算其值的表示式。Rewriter 會將 psSRAPRewriter_convert_expression 函數前置於此表示式之前。從而計算此表示式,並且 psSRAPRewriter_convert_expression 函數在執行階段重新寫入輸出。


備註 –

以上範例中,不需將 test1 變數作為 JavaScript 變數規則的一部分。jstest1 的函數規則負責執行重新寫入。


DHTML 參數

其值為 HTML 的函數參數

本機 JavaScript 方法,如會以動態的方式產生 HTML 網頁的 document.write(),歸屬於此種類。

本節分為下列部分:

DHTML 參數語法

<Function name="functionName" paramPatterns="y" type="DHTML" [source="*"]/>

其中

name 是函數名稱

paramPatterns 指出需重新寫入的參數 (必須的)

y y 的位置會指出需重新寫入的函數參數。上列語法中,僅會重新寫入第一個參數

DHTML 參數範例

假設此網頁的基準 URL 是:

http://xyz.siroe.com/test/rewriter/test1/jscript/JSFUNC/page.html

網頁內容

<script>
<!--
document.write(\q<a href="/index.html">write</a><BR>\q)
document.writeln(\q<a href="index.html">writeln</a><BR>\q)
document.write("http://abc.sesta.com/index.html<BR>")
document.writeln("http://abc.sesta.com/index.html<BR>")
//-->
</SCRIPT>

規則

<Function name="DHTML" name="document.write" paramPatterns="y"/>
<Function name="DHTML" name="document.writeln" paramPatterns="y"/>
<Attribute name="href"/>

輸出

<SCRIPT>
<!--
document.write(\q<a href="gateway-URL/
http://xyz.siroe.com/index.html">write</a><BR>\q)
document.writeln(\q<a href="gateway-URL/
http://xyz.siroe.com/test/rewriter/test1/
jscript/JSFUNC/index.html">writeln</a><BR>\q)
document.write("http://abc.sesta.com/index.html<BR>")
document.writeln("http://abc.sesta.com/index.html<BR>")
//-->
</SCRIPT>

描述

第一個規則指出 document.write 函數中的第一個參數需要重新寫入。第二個規則指出 document.writeln 函數中的第一個參數需要重新寫入。第三個規則是一個簡單 HTML 規則,指出名稱為 href 的所有屬性皆需重新寫入。在範例中,DHTML 參數規則會識別出函數中需重新寫入的參數。然後便套用 HTML 屬性規則,以實際重新寫入識別出的參數。

DJS 參數

其值為 JavaScript 的函數參數。

本節分為下列部分:

DJS 參數語法

<Function name="functionName" paramPatterns="y" type="DJS" [source="*"]/>

其中

name 是含有一個 DJS 參數的函數名稱 (必須的)

paramPatterns 指出上列函數中哪一個參數是 DJS (必須的)

y y 的位置會指出需重新寫入的函數參數。上列語法中,僅會重新寫入第一個參數

type 是 DJS (必須的)

source 是網頁的 URI (可選,預設為 *,表示任何 URI)

DJS 參數範例

假設此網頁的基準 URL 是:

http://abc.sesta.com/page.html

網頁內容

<script>
menu.addItem(new NavBarMenuItem("All Available Information","JavaScript:top.location=\qhttp://abc.sesta.com\q"));
</script>

規則

<Function name="DJS" name="NavBarMenuItem" paramPatterns=",y"/>
<Variable name="URL">top.location</Variable>

輸出

<script>
menu.addItem(new NavBarMenuItem("All Available Information",
"JavaScript:top.location=\qgateway-URL/
http://abc.sesta.com\q"));
</script>

描述

第一個規則指出 NavBarMenuItem 函數中的第二個包含 JavaScript 的參數需要重新寫入。在 JavaScript 中,top.location 變數亦需重新寫入。將使用第二個規則來重新寫入此變數。

XML 內容的規則

網頁可能包含 XML 內容,其因此可包含 URL。需重新寫入的 XML 內容可分為兩類:

標記文字

此規則是用於重新寫入標記元素的 PCDATA 或 CDATA。

本節分為下列部分:

標記文字語法

<TagText tag="tagName" 
[attributePatterns="attribute_patterns_for_ this_tag" source="*"]/>

其中

tagName 為標記名稱

attributePatterns 是此標記的屬性及值式樣 (可選,表示此標記完全不具屬性)

source 是此 xml 檔案的 URI (可選,預設為 *,表示任何 xml 網頁)

標記文字範例

假設此網頁的基準 URL 是:

http://abc.sesta.com/test/rewriter/test1/xml/page.html

網頁內容

<xml>
<Attribute name="src">test.html</attribute>
<attribute>abc.html</attribute>
</xml>

規則

<TagText tag="attribute" attributePatterns="name=src"/>

輸出

<xml>
<Attribute name="src">gateway-URL/
http://abc.sesta.com/test/rewriter/test1/
xml/test.html</attribute><attribute>abc.html</attribute>
</xml>

描述

網頁內容的第一行包含屬性範例。此網頁內容的第二行不包含具有屬性呼叫名稱且屬性名稱值為 src 的屬性,因此不會執行任何重新寫入的動作。要進行重新寫入,我們亦需具有 <TagText tag="attribute"/>

屬性

XML 屬性的規則與 HTML 的屬性規則類似。其間的差異在於:XML 的屬性規則有大小寫之分,而 HTML 屬性規則則無。這是因為 XML 中建立了區分大小寫的特性,而 HTML 中未建立。

Rewriter 會依據屬性名稱轉譯屬性值。

本節分為下列部分:

屬性語法

<Attribute name="attributeName " [tag="*" type="URL" valuePatterns="*" source="*"]/>

其中

attributeName 為屬性名稱 (必須的)

tag 是包含此屬性的標記的名稱 (可選,預設為 *,表示任何標記)

valuePatterns 請參閱在規則中與式樣相符

source 是此 XML 網頁的 URI (可選,預設為 *,表示在任何 XML 網頁中)

屬性範例

假設此網頁的基準 URL 是:

http://abc.sesta.com/test/rewriter/test1/xml/page.html

網頁內容

<xml>
<baseroot href="/root.html"/>
<img href="image.html"/>
<string href="1234|substring.html"/>
<check href="1234|string.html"/>
</xml>

規則

<Attribute name="href"tag="check" valuePatterns="1234|"/>

輸出

<xml>
<baseroot href="/root.html"/><img href="image.html"/>
<string href="1234|substring.html"/><check href="1234|
gateway-URL
/http://abc.sesta.com/test/rewriter/test1/xml/string.html"/></xml>

描述

上列範例中,僅重新寫入第四行,因為其符合規則中所指定的所有條件。請參閱在規則中與式樣相符

Cascading Style Sheet (串接樣式表) 的規則

HTML 網頁中的 Cascading Style Sheet (包含 CCS2) 會被轉譯。沒有任何針對此轉譯而定義的規則,因為 URL 僅出現在 CSS 的 url() 函數與匯入語法中。

WML 的規則

WML 與 HTML 相似,因此會將 HTML 規則套用至 WML 內容。使用 WML 內容的一般規則集。請參閱HTML 內容的規則

使用遞迴功能

Rewriter 使用遞迴功能在符合的字串式樣的結尾搜尋是否有相同的式樣。

例如,當 Rewriter 剖析下列字串時:

<a href="src=abc.jpg,src=bcd.jpg,src=xyz.jpg>

規則

<Attribute name="href" valuePatterns="*src=**"/>

僅會重寫第一個出現的式樣,看起來會像這個樣子:

<a href="src=http://jane.sun.com/abc.jpg>

但是如果您使用如下的遞迴選項,

<Attribute name="href" valuePatterns="REC:*src=**"/>;

Rewriter 在符合的字串式樣的結尾搜尋是否有相同的式樣,因此輸出將會是:

<a href="src=http://jane.sun.com/abc.jpg,src= http://jane.sun.com/bcd.jpg,src=http://jane.sun.com/xyz.jpg>