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

第 4 章 使用 Rewriter

Secure Remote Access 的 Rewriter 元件可讓使用者透過剖析網頁,經由閘道來存取企業內部網路的網頁。

本章涵蓋下列主題:

Rewriter 簡介

Secure Remote Access 的 Rewriter 元件能讓一般使用者利用修改網頁上的統一資源識別碼 (Uniform Resource Identifier, URI) 參照,以指向閘道從而瀏覽企業內部網路。URI 可定義於任何已註冊名稱空間內封裝名稱的方法,並以該名稱空間為其加標記。最常見的 URI 類別為單一資源定址器 (Uniform Resource Locator, URL)。Rewriter 僅支援 HTTP 或 HTTPS。不論協定的大小寫為何都支援。Rewriter 僅支援相對 URL 中包含反斜線符號。


範例 4–1 重新寫入 URL

http://abc.sesta.com\\index.html 會被重新寫入。

這些 URL 不會被重新寫入:http:\\\\abc.sesta.com http:/abc.com


字元集編碼

HTTP 標準需要 HTTP 標頭或 HTML 中繼標記為網頁指定字元集。但是有時候此資訊沒有辦法使用。字元集必須為已知,如此資料編碼的設定以及資料的顯示才會依照建立的想法進行。

要偵測字元集,請從 Java Enterprise System Accessory CD 安裝 SUNWjchdt 套裝軟體。如果已安裝此產品,Rewriter 將會偵測到它並在需要時使用。


備註 –

使用此產品將會影響效能,因此應該只在需要時才安裝此產品。如需安裝、配置與用法的詳細資訊,請參閱 jcharset_readme.txt


Rewriter 使用方案

使用者試圖經由閘道存取企業內部網路網頁時,即可使用 Rewriter 來順利存取網頁。URLScraper 與閘道會使用 Rewriter。

URLScraper

URL Scraper 提供者會從配置的 URI 取得內容。將這些 URI 傳送至瀏覽器前,它會將所有相對 URI 展開為絕對 URI。

例如,如果使用者嘗試用下列方式存取網站:

<a href="../mypage.html">

Rewriter 會將此轉譯為:

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

其中 http://yahoo.com/test/ 是網頁的基準 URL。

如需 URLScraper 提供者的詳細資訊,請參閱「Sun Java System Portal Server 管理指南」。

閘道

閘道從網際網路入口網站獲取內容。將內容傳送至瀏覽器前,它會將閘道 URI 置於目前的 URI 之前,如此來自瀏覽器的後續 URI 請求都可到達閘道。

例如,如果使用者試圖用以下方式存取網際網路機器上的 HTML 網頁:

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

Rewriter 會引用閘道置於這個 URL 之前,如下所示:

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

使用者點選與此控點相關的連結時,瀏覽器便會連絡閘道。閘道會從 mymachine.intranet.com 取得 mypage.html 的內容。

閘道使用多種規則來判定是否需重新寫入取得網頁中的元素。

撰寫規則集

如需定義規則集的詳細資訊,請參閱「Portal Server 管理指南」。在建立新規則集後,您必須定義必要的規則。

本節涵蓋下列主題:

公開介面 (規則集 DTD)

規則集 DTD:

<?xml version="1.0" encoding="UTF-8"?>
<!--
The following constraints are not represented in DTD, but taken care of programmatically
    1. In a Rule, All Mandatory attributes cannot be "*".
    2. Only one instance of the below elements is allowed, but in any order.
    1)HTMLRules
    2)JSRules
    3)XMLRules
    3. ID should always be in lower case.
-->
<!ENTITY % eURL ’URL’>
<!ENTITY % eEXPRESSION ’EXPRESSION’>
<!ENTITY % eDHTML ’DHTML’>
<!ENTITY % eDJS ’DJS’>
<!ENTITY % eSYSTEM ’SYSTEM’>

<!ENTITY % ruleSetElements ’(HTMLRules | JSRules | XMLRules)?’>
<!ENTITY % htmlElements ’(Form | Applet | Attribute)*’>
<!ENTITY % jsElements ’(Variable | Function)*’>
<!ENTITY % xmlElements ’(Attribute | TagText)*’>

<!ELEMENT RuleSet (%ruleSetElements;,%ruleSetElements;,%ruleSetElements;)>
<!ATTLIST RuleSet
    id ID #REQUIRED
    extends CDATA "none"
>

<!-- Rules for identifying rules in HTML content -->
<!ELEMENT HTMLRules (%htmlElements;)>
<!ELEMENT Form EMPTY>
<!ATTLIST Form
    name CDATA #REQUIRED
    field CDATA #REQUIRED
    valuePatterns CDATA ""
    source CDATA "*"
>

<!ELEMENT Applet EMPTY>
<!ATTLIST Applet
    code CDATA #REQUIRED
    param CDATA "*"
    valuePatterns CDATA ""
    source CDATA "*"
>

<!-- Rules for identifying rules in JS content -->
<!ELEMENT JSRules (%jsElements;)>
<!ELEMENT Variable EMPTY>
<!ATTLIST Variable
    name CDATA #REQUIRED
    type (%eURL; | %eEXPRESSION; | %eDHTML; | %eDJS; | %eSYSTEM;) "EXPRESSION"
    source CDATA "*"
>

<!ELEMENT Function EMPTY>
<!ATTLIST Function
    name CDATA #REQUIRED
    paramPatterns CDATA #REQUIRED
    type (%eURL; | %eEXPRESSION; | %eDHTML; | %eDJS;) "EXPRESSION"
    source CDATA "*"
>

<!-- Rules for identifying rules in XML content -->
<!ELEMENT XMLRules (%xmlElements;)>
<!ELEMENT TagText EMPTY>
<!ATTLIST TagText
    tag CDATA #REQUIRED
    attributePatterns CDATA ""
    source CDATA "*"
>

<!ELEMENT Attribute EMPTY>
<!ATTLIST Attribute
    name CDATA #REQUIRED
    tag CDATA "*"
    valuePatterns CDATA ""
    type (%eURL; | %eDHTML; | %eDJS; ) "URL"
    source CDATA "*"
>

備註 –

除必要的屬性值不能只有 * 之外,您可使用 * 做為規則值的一部分。會忽略這類規則,但是訊息會記錄在 RuleSetInfo 記錄檔中。如需此記錄檔的資訊,請參閱除錯檔案名稱


XML DTD 範例

本節包含一範例規則集。我們使用第 140 頁的「案例研究」來說明 Rewriter 解譯這些規則的方式。

<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
Rules for integrating a mail client with the gateway.
-->
<!DOCTYPE RuleSet SYSTEM "jar://rewriter.jar/resources/RuleSet.dtd">
<RuleSet type="GROUPED" id="owa">
<HTMLRules>
<Attribute name="action" />
<Attribute name="background" />
<Attribute name="codebase" />
<Attribute name="href" />
<Attribute name="src" />
<Attribute name="lowsrc" />
<Attribute name="imagePath" />
<Attribute name="viewClass" />
<Attribute name="emptyURL" />
<Attribute name="draftsURL" />
<Attribute name="folderURL" />
<Attribute name="prevMonthImage" />
<Attribute name="nextMonthImage" />
<Attribute name="style" />
<Attribute name="content" tag="meta" />
</HTMLRules>
<JSRules>
<!-- Rules for Rewriting JavaScript variables in URLs -->
<Variable name="URL"> _fr.location </Variable>
<Variable name="URL"> g_szUserBase </Variable>
<Variable name="URL"> g_szPublicFolderUrl </Variable>
<Variable name="URL"> g_szExWebDir </Variable>
<Variable name="URL"> g_szViewClassURL </Variable>
<Variable name="URL"> g_szVirtualRoot </Variable>
<Variable name="URL"> g_szBaseURL </Variable>
<Variable name="URL"> g_szURL </Variable>
<Function name="EXPRESSION" name="NavigateTo" paramPatterns="y"/>
</JSRules>
<XMLRules>
<Attribute name="xmlns"/>
<Attribute name="href" tag="a"/>
<TagText tag="baseroot" />
<TagText tag="prop2" />
<TagText tag="prop1" />
<TagText tag="img" />
<TagText tag="xsl:attribute"
attributePatterns="name=src" />
</XMLRules>
</RuleSet>

撰寫規則的步驟

撰寫規則的一般程序如下:

規則集指導方針

建立規則集時,請記住:

定義規則集根元素

規則集根元素具有兩種屬性:

使用遞迴功能

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>

定義以語言為基礎的規則

規則以下列語言為基礎:

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>

使用除錯記錄檔排除故障

要排除 Rewriter 的故障,您需啟用除錯記錄檔。

除錯訊息分類如下:

設定 Rewriter 除錯層級

Procedure設定 Rewriter 除錯層級

  1. 以超級使用者身份登入閘道機器,然後編輯下列檔案:


    gateway-install-root/SUNWam/config/AMConfig-instance-name.properties
  2. 設定除錯層級:


    com.iplanet.services.debug.level=

    除錯層級為:

    error - 只會在除錯檔案中記錄嚴重錯誤。在此種錯誤發生時,Rewriter 通常會停止運作。

    warning - 會記錄警告訊息。

    message - 會記錄所有的除錯訊息。

    off - 不會記錄任何除錯訊息。

  3. AMConfig-instance-name .properties 檔案的下列特性中,指定除錯檔案目錄:


    com.iplanet.services.debug.directory=/var/opt/SUNWam/debug

    其中 /var/opt/SUNWam/debug 是預設的除錯目錄。

  4. 從終端機視窗重新啟動閘道:


    ./psadmin start-sra-instance –u amadmin – f  <password file> –N <profile name>– t  <gateway>
    

除錯檔案名稱

當將除錯層級設定為 message 時,除錯會產生一組檔案。除錯檔案名稱會列出 Rewriter 檔案與其中包含的資訊。

表 4–2 Rewriter 除錯檔案

檔案名稱 

資訊 

RuleSetInfo 

包含已用於重新寫入的所有規則集,皆記錄在此檔案中。 

Original Pages 

包含網頁 URI、resolveURI (若與網頁 URI 不同)、內容 MIME、套用至網頁的規則集、剖析器 MIME 與原始內容。 

與剖析有關的特定錯誤/警告/訊息亦會出現在此檔案中。 

在 message 模式中會記錄完整內容。在 warning 與 error 模式中只會記錄重新寫入期間發生的異常情況。 

Rewritten Pages 

包含網頁 URI、resolveURI (若與網頁 URI 不同)、內容 MIME、套用至網頁的規則集、剖析器 MIME 與已重新寫入的內容。 

當除錯模式設為 message 時,即會儲存這些資訊。 

Unaffected Pages 

包含未經修改的網頁清單。 

URIInfo Pages 

包含已找到及轉譯的 URL。所有其內容與原始資料相同的網頁詳細資訊將記錄至此檔案中。 

記錄的詳細資訊包括:網頁 URI、MIME 與編碼資料、用於重新寫入的 rulesetID 以及剖析器 MIME。 

除了上述檔案之外,Rewriter 會產生一個用於未留存於上述檔案中的其他除錯訊息的檔案。檔案名稱包括兩個部分:第一部分為 pwRewriterpsSRARewriter,第二部分則為使用 portalgateway-profile-name 的副檔名。

除錯檔案會顯示在入口網站或閘道中。這些檔案是位於 AMConfig-instance-name.properties 檔案中指出的目錄。

Rewriter 元件會產生下列檔案組以協助除錯作業:

prefix_RuleSetInfo.extension

prefix_OrginalPages.extension

prefix_RewrittenPages.extension

prefix_UnaffectedPages.extension

prefix_URIInfo.extension

其中

prefix 為用於 URLScraper 用途記錄檔的 psRewriter 或用於閘道用途記錄檔的 psSRAPRewriter

extension 則為用於 URLScraper 用途的 portal 或用於閘道用途的 gateway-profile-name

例如,若利用閘道上的 Rewriter 來轉換網頁並使用預設的閘道設定檔,則除錯作業會產生下列檔案:

psSRAPRewriter_RuleSetInfo.default

psSRAPRewriter_OriginalPages.default

psSRAPRewriter_RewrittenPages.default

psSRAPRewriter_UnaffectedPages.default

psSRAPRewriter_URIInfo.default

psSRAPRewriter.default

工作範例

本節包括:

這些頁面範例位於 portal-server-URL /rewriter 目錄下。您可在套用規則前瀏覽整個頁面,然後經由您的閘道檢視含已重新寫入之輸出的檔案,以查看規則的套用結果。在某些範例中,規則已經是 default_gateway_ruleset 的一部分。在某些範例中,您必須將規則納入 default_gateway_ruleset 中。這一點會在適當之處提及。


備註 –

某些以粗體顯示的陳述式表示其已被重新寫入。


可用的範例如下:

HTML

JavaScript

函數

XML

HTML 內容範例

HTML 屬性範例

Procedure使用 HTML 屬性範例

  1. 您可自下列路徑存取此範例:

    portal-server-URL /rewriter/HTML/attrib/attribute.html

  2. 請確定您已於閘道服務的 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.comhost1.siroe.com

    若未定義,則會採用直接連接,且不前置閘道 URL。

    您不需將此範例中指定的規則新增至 default_gateway_ruleset 中,因為規則已完成定義。

重新寫入前的 HTML

<html>
Rewriting starts
<head>
<title>TEST PAGE () </title>
</head>
ID-htmlattr.1
<br><br>
1.a href <a href="http://abc.sesta.com/images/logo.gif">http://..</a>
<br><br>
2. href <a href="https://host1.siroe.com">https://..</a>
<br><br>
3. href <a href="../images/logo.gif">../images/</a>
<br><br>
4. href <a href="images/logo.gif">images/..</a> <br><br>
5. href <a href="../../images/logo.gif">../../images/</a> <br><br>
Rewriting ends
</html>

規則

<Attribute name="href"/>

重新寫入後的 HTML

<html>
Rewriting starts
<head>
<title>TEST PAGE () </title>
</head>
ID-htmlattr.1
<br><br>
1. a href <a href="gateway-URL/http://abc.sesta.com/images/logo.gif">http://..</a> <br>

// 重新寫入此 URL 是因為 <Attrib name="href"/> 規則已於 default_gateway_ruleset 中加以定義。由於此 URL 是絕對 URL,因此僅會前置閘道 URL。請確定您已於閘道服務的 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com。否則,會認為是直接連接,而不會前置閘道 URL。

2. href <a href="gateway-URL/https://host1.siroe.com">https://..</a>

// 同樣,host1.siroe.com 需於閘道服務的 [網域與子網域的代理伺服器] 清單中定義。否則,會認為是直接連接,而不會前置閘道 URL。

<br><br>
3. href <a href="gateway-URL/portal-server-URL/rewriter/HTML/images/logo.gif">../images/</a>

// 由於指定的是相對路徑,因此會前置閘道 URL 與 portal-server-URL (附有所需子目錄)。此連結將無法作用,因為在所提供之範例結構的 HTML 目錄下沒有名為 images 的目錄。

<br><br>
4 href <a href="gateway-URL/portal-server-URL/rewriter/HTML/attrib/images/
logo.gif">images/..</a> <br><br>

// 由於指定的是相對路徑,因此會前置閘道 URL 與 Portal Server URL (附有所需子目錄)。

5. href <a href="gateway-URL/portal-server-URL/rewriter/images/logo.gif">
../../images/</a> <br><br>

// 由於指定的是相對路徑,因此會前置閘道 URL 與 Portal Server URL (附有所需子目錄)。此連結將無法作用,因為在所提供之範例結構的 Rewriter 目錄下沒有名為 images 的目錄。

Rewriting ends</html>

HTML 動態 JavaScript 記號的範例

此部分討論使用 HTML JavaScript 記號範例

Procedure使用 HTML JavaScript 記號範例:

  1. 您可自下列路徑存取此範例:

    portal-server-URL /rewriter/HTML/jstokens/JStokens.html

  2. 將此範例中指定的規則新增至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。

  3. 在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset

  4. 從終端機視窗重新啟動閘道:


    ./psadmin start-sra-instance –u amadmin – f  <password file> –N <profile name>– t  <gateway>
    

重新寫入前的 HTML

<html>
<head>
Rewriting starts
<script language="javascript">
function Check(test,ind){
if (ind == \qblur\q)
{alert("testing onBlur")}
if (ind == \qfocus\q)
{alert("testing onFocus")}
}
</SCRIPT>
</head>
<body>
<form>
<input TYPE=TEXT SIZE=20 value=blur onAbort="Check
(\q/indexblur.html\q,\qblur\q);return;">
<input TYPE=TEXT SIZE=20 value=blur onBlur="Check
(\q/indexblur.html\q,\qblur\q);return;">
<input TYPE=TEXT SIZE=20 value=focus onFocus="Check
(\q/focus.html\q,\qfocus\q);return;">
<input TYPE=TEXT SIZE=20 value=focus onChange="Check
(\q/focus.html\q,\qfocus\q);return;">
<input TYPE=TEXT SIZE=20 value=focus onClick="Check
(\q/focus.html\q,\qblur\q);return;">
<br><br>
</form>
</body>
Rewriting ends
</html>

規則

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

備註 –

<Function name="URL" name="Check" paramPatterns="y"/> 為 JavaScript 函數規則,並於 JavaScript 函數範例中詳細說明。


重新寫入後的 HTML

<html>
<head>
Rewriting starts
<script language="javascript">
function Check(test,ind){
if (ind == \qblur\q)
{alert("testing onBlur")}
if (ind == \qfocus\q)
{alert("testing onFocus")}
}
</SCRIPT>
</head>
<body>
<form>
<input TYPE=TEXT SIZE=20 value=blur onAbort="Check
(\qgateway URL/portal-server-URL/indexblur.html\q,\qblur\q);return;">
<input TYPE=TEXT SIZE=20 value=blur onBlur="Check
(\qgateway URL/portal-server-URL/indexblur.html\q,\qblur\q);return;">
<input TYPE=TEXT SIZE=20 value=focus onFocus="Check
(\qgateway URL/portal-server-URL/focus.html\q,\qfocus\q);return;">
<input TYPE=TEXT SIZE=20 value=focus onChange="Check
(\qgateway URL/portal-server-URL/focus.html\q,\qfocus\q);return;">
<input TYPE=TEXT SIZE=20 value=focus onClick="Check
(\qgateway URL/portal-server-URL/focus.html\q,\qblur\q);return;">

// 所有敘述是依照此範例重寫。已在每種情況中前置閘道 URL 與 Portal Server URL。這是因為 onAbortonBluronFocusonChangeonClick 的規則都已在 default_gateway_ruleset 檔案中定義。Rewriter 會偵測 JavaScript 記號,並將之傳送至 JavaScript 函數規則中以便進行進一步的處理。此範例中的第二個規則會告知 Rewriter 該重新寫入哪一個參數。

</body>
<br>

Rewriting ends

</html>

HTML 表單範例

Procedure使用表單範例

  1. 您可自下列路徑存取表單範例:

    portal-server-URL/rewriter/HTML/forms/formrule.html

  2. 請確定您已於閘道服務的 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com

    若未定義,則會採用直接連接,且不前置閘道 URL。

  3. 將此範例中指定的規則新增至 [重新寫入 HTML 屬性的規則] 部分的 default_gateway_ruleset 中。

  4. 在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset

  5. 從終端機視窗重新啟動閘道:


    ./psadmin start-sra-instance –u amadmin – f  <password file> –N <profile name>– t  <gateway>
    

重新寫入前的 HTML 網頁

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
RW_START
<p>
<form name="form1" method="Post" action=
"http://abc.sesta.com/casestudy/html/form.html">
<input type="hidden" name="name1" value="0|1234|/test.html">
<input type="hidden" name="name3" value="../../html/test.html">
<form name="form2" method="Post" action="
http://abc.sesta.com/testcases/html/form.html"><br>
<input type="hidden" name="name1" value="0|1234|
../../html/test.html"></form>
RW_END </p>
</body>
</html>

規則

<Form source="*" name="form1" field="name1" valuePatterns="0|1234|"/>

重新寫入後的 HTML 網頁

<HTML>
<HEAD>
RW_START
</HEAD>
<BODY>
<P>
<FORM name=form1  method=POST action="gateway-URL/http://abc.sesta.com/casestudy/html/form.html">

// 重新寫入此 URL 是因為已在 default_gateway_ruleset 中將 <Attribute name="action"/> 定義為 HTML 規則的一部分。由於此 URL 應該是絕對 URL,因此僅需前置閘道 URL。請確定您已於閘道服務的 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com。否則,會認為是直接連接,而不會前置閘道 URL。

<input type=hidden name=name1 value=
"0|1234|gateway URL/portal-server-URL/test.html">

// 此處的表單名稱為 form1,而欄位名稱則為 name1。上述名稱與規則中指定的表單名稱與欄位名稱相符。規則指出 valuePatterns0|1234|,其符合此陳述式中的 value。因此會重新寫入出現在 valuePattern 之後的 URL。將前置 Portal Server URL 與閘道 URL。請參閱在規則中與式樣相符以取得 valuePatterns 的詳細資訊。

<input type=hidden name=name3 value="../../html/test.html">

// 未重新寫入此 URL 是因為此 name 不符合規則中所指定的 field 名稱。

</FORM>
<FORM name=form2 method=POST action=
"gateway-URL/http://abc.sesta.com/casestudy/html/form.html"><BR>

// 重新寫入此 URL 是因為已在預設規則集中將 <Attribute name="action"/> 定義為 HTML 規則的一部分。由於此 URL 應該是絕對 URL,因此僅需前置閘道 URL。

<input type=hidden name=name1 value="0|1234|../../html/test.html">

// 不重新寫入此 URL 是因為此表單名稱不符合規則中所指定的名稱。

</FORM>
</BODY>
RW_END
</HTML>

HTML Applet 範例

Procedure使用 Applet 範例

  1. 請取得 Applet 類別檔案。RewriteURLinApplet.class 檔案位於下列位置:

    portal-server-URL/rewriter/HTML/applet/appletcode

    出現 Applet 代碼之網頁的基準 URL 為:

    portal-server-URL/rewriter/HTML/applet/rule1.html

  2. 將此範例中指定的規則新增至 [重新寫入 HTML 屬性的規則] 部分的 default_gateway_ruleset 中。

  3. 在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset

  4. 重新啟動閘道:


    ./psadmin start-sra-instance –u amadmin – f  <password file> –N <profile name>– t  <gateway>
    

重新寫入前的 HTML

<html>
Rewriting starts
<br>
<applet codebase=appletcode code=RewriteURLinApplet.class archive=/test>
<param name=Test1 value="/index.html">
<param name=Test2 value="../index.html">
<param name=Test3 value="../../index.html">
</applet>
Rewriting ends
</html>

規則

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

重新寫入後的 HTML

<HTML>
Rewriting starts
<BR>
<APPLET codebase=gateway-URL/portal-server-URL
/rewriter/HTML/applet/appletcode=RewriteURLinApplet.class archive=/test>

// 重新寫入此 URL 是因為規則 <Attribute name="codebase"/> 已呈現為 default_gateway_ruleset 檔案的一部份。會前置閘道與 Portal Server URL 以及至 appletcode 目錄的路徑。

<param name=Test1 value=
"gateway-URL/portal-server-URL/index.html">

// 重新寫入此 URL 是因為此網頁的基準 URL 為 rule1.html,且參數名稱符合規則中指定的參數 Test*。由於已將 index.html 指定放置於根層級,因此將直接前置閘道與 Portal Server URL。

<param name=Test2 value="gateway-URL
/portal-server-URL/rewriter/HTML/index.html">

// 重新寫入此 URL 是因為此網頁的基準 URL 為 rule1.html,且參數名稱符合規則中指定的參數 Test*。將依需要前置路徑。

<param name=Test3 value="gateway-URL
/portal-server-URL/rewriter/index.html">

// 重新寫入此 URL 是因為此網頁的基準 URL 為 rule1.html,且參數名稱符合規則中指定的參數 Test*。將依需要前置路徑。

</APPLET>
Rewriting ends
</HTML>

JavaScript 內容範例

JavaScript URL 變數的範例

Procedure使用 JavaScript URL 變數範例

  1. 您可自下列路徑存取此範例:

    portal-server-URL /rewriter/JavaScript/variables/url/js_urls.html

  2. 請確定您已於閘道服務的 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com

    若未定義,則會採用直接連接,且不前置閘道 URL。

  3. 將此範例中指定的規則新增至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。

  4. 在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset

  5. 若您新增此規則,請重新啟動閘道:


    ./psadmin start-sra-instance –u amadmin – f  <password file> –N <profile name>– t  <gateway>
    

重新寫入前的 HTML 網頁

<html>
Rewriting starts
<head>
<title>JavaScript Variable test page</title>
</head>
<body>
<script LANGUAGE="Javascript">
<!--
//URL Variables
var imgsrc="/tmp/tmp.jpg";
var imgsrc="./tmp/tmp.jpg";
var imgsrc="../tmp/tmp.jpg";
var imgsrc="../../tmp/tmp.jpg";
var imgsrc="http://abc.sesta.com/tmp/tmp.jpg";
var imgsrc="../../../tmp/tmp.jpg";
var imgsrc="tmp/tmp.jpg";
//-->
</SCRIPT>
<br>
Testing JavaScript variables!
<br>
<img src="images/logo.gif">
<br>
Image
</body>
<br>
Rewriting ends
</html>

規則

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

重新寫入後的 HTML 網頁

<html>
Rewriting starts
<head>
<title>JavaScript Variable test page</title>
</head>
<body>
<script LANGUAGE="Javascript">
<!--
//URL Variables
var imgsrc="gateway-URL/portal-server-URL/tmp/tmp.jpg";
var imgsrc="gateway-URL/portal-server-URL
/rewriter/JavaScript/variables/url/tmp/tmp.jpg";
var imgsrc="gateway-URL/portal-server-URL
/rewriter/JavaScript/variables/tmp/tmp.jpg";
var imgsrc="gateway-URL/portal-server-URL
/rewriter/JavaScript/tmp/tmp.jpg";
var imgsrc="gateway-URL/http://abc.sesta.com/tmp/tmp.jpg";
var imgsrc="gateway-URL/portal-server-URL/rewriter/tmp/tmp.jpg";
var imgsrc="gateway-URL/portal-server-URL
/rewriter/JavaScript/variables/url/tmp/tmp.jpg";

// 上列所有 URL 皆為規則中所指定的 URL 類型且名稱為 imgsrc 的 JavaScript 變數。因此皆會前置閘道與 Portal Server URL。將依需前置位於 Portal Server URL 後的路徑。

//-->
</SCRIPT>
<br>
Testing JavaScript variables!
<br>
<img src="gateway URL/portal-server-URL/rewriter
/JavaScript/variables/url/images/logo.gif">

// 重新寫入此行是因為已於 default_gateway_ruleset 中定義規則 <Attribute name="src"/>

<br>
Image
</body>
<br>
Rewriting ends
</html>

JavaScript EXPRESSION 變數範例

Procedure使用 JavaScript EXPRESSION 變數範例

  1. 您可自下列路徑存取此範例:

    portal-server-URL /rewriter/JavaScript/variables/expr/expr.html

  2. 將此範例中指定的規則新增 (若尚不存在) 至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。

  3. 在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset

  4. 若您新增此規則,請重新啟動閘道:


    ./psadmin start-sra-instance –u amadmin – f  <password file> –N <profile name>– t  <gateway>
    

重新寫入前的 HTML 網頁

<html>
<head>
<title>JavaScript EXPRESSION Variables Test Page</title>
</head>
<body>
<script LANGUAGE="Javascript">
<!--
//Expression variables
var expvar1="images";
var expvar2="/logo.gif";
var expvar = expvar1 + expvar2;
document.write("<A HREF="+expvar+">EXPRESSION</A><P>")
var expvar="/images/logo"+".gif";
document.write("<A HREF="+expvar+">EXPRESSION</A><P>")
//-->
</SCRIPT>
Testing JavaScript EXPRESSION variables
</body>
</html>

規則

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

重新寫入後的 HTML 網頁

<html>
<head>
<title>JavaScript EXPRESSION Variables Test Page</title>
</head>
<body>
<SCRIPT>
// Rewriter appends the wrapper function 
psSRAPRewriter_convert_expression here
</SCRIPT>
<script LANGUAGE="Javascript">
<!--
//Expression variables
var expvar1="images";
var expvar2="/logo.gif";
var expvar =psSRAPRewriter_convert_expression( expvar1 + expvar2);

// Rewriter 會將此陳述式右側識別為 JavaScript EXPRESSION 變數。Rewriter 無法在伺服器端計算出此表示式的值。因此,psSRAPRewriter_convert_expression 函數會被置於此表示式之前。此表示式將於用戶端計算,並視需要重新寫入。

document.write("<A HREF="+expvar+">EXPRESSION</A><P>")

// 將使用前一個陳述式之 expvar 的重新寫入值來計算此表示式的值。由於結果為一有效的 URL (範例中此處出現一個圖形),因此連結有效。

var expvar="gateway URL/portal-server-URL/images/logo"+".gif";

// Rewriter 會將 expvar 的右側識別為字串表示式。此表示式可於伺服端計算,因此可直接重新寫入。

document.write("<A HREF="+expvar+">EXPRESSION</A><P>")

// 將使用前一個陳述式之 expvar 的重新寫入值來計算此表示式的值。由於結果不是有效的 URL (於結果位置中未出現圖形),因此連結無效。

//-->
</SCRIPT>
Testing JavaScript EXPRESSION variables
</body>
</html>

JavaScript DHTML 變數的範例

Procedure使用 JavaScript DHTML 變數範例

  1. 您可自下列路徑存取此範例:

    portal-server-URL /rewriter/JavaScript/variables/dhtml/dhtml.html

  2. 請確定您已於閘道服務的 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com。若未定義,則會採用直接連接,且不前置閘道 URL。

  3. 將此範例中指定的規則新增 (若尚不存在) 至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset

  4. 若您新增此規則,請重新啟動閘道:


    ./psadmin start-sra-instance –u amadmin – f  <password file> –N <profile name>– t  <gateway>
    

重新寫入前的 HTML 網頁

<html>
<head>
<title>JavaScript DHTML Variable Test Page</title>
</head>
<body>
<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>"
var dhtmlVar="<a href=images/test.html>"
var dhtmlVar="<a href=http://abc.sesta.com/images/test.html>"
var dhtmlVar="<img src=http://abc.sesta.com/images/test.html>"
//-->
</SCRIPT>
<br><br>
Testing DHTML Variables
<br><br>
<img src="images/logo.gif">IMAGE
</body>
</html>

規則

<Variable name="DHTML">dhtmlVar</Variable>

重新寫入後的 HTML 網頁

<html>
<head>
<title>JavaScript DHTML Variable Test Page</title>
</head>
<body>
<script LANGUAGE="Javascript">
<!--
//DHTML Var
var dhtmlVar="<a href=gateway-URL/portal-server-URL
/rewriter/JavaScript/images/test.html>"

// JavaScript DHTML 規則會將 dhtmlVar 的右側識別為動態 HTML 內容。因此會套用 default_gateway_ruleset 檔案中的 HTML 規則。動態 HTML 包含 href 屬性。default_gateway_ruleset 定義規則 <Attribute name="href"/>。因此會重新寫入 href 屬性的值。但是 URL 並非絕對,因此網頁的基準 URL 與所需子目錄會取代相對 URL。最後會前置閘道 URL 以導出最後的重新寫入輸出。

var dhtmlVar="<a href=gateway-URL
/portal-server-URL/../images/test.html>"

// 雖然已附加此網頁的基準 URL,且已前置閘道 URL,但是最後的 URL 卻無效。這是因為初始 URL /../images/test.html 不正確。

var dhtmlVar="<a href=gateway-URL
/portal-server-URL/images/test.html>"

// 同樣,JavaScript DHTML 規則會將右側識別為動態 HTML 內容,並將之傳送至 HTML 規則。將套用 default_gateway_ruleset 中的 HTML 規則 <Attribute name="href"/>,且已如所示重新寫入陳述式。已前置閘道 URL 與 Portal Server URL。

var dhtmlVar="<a href=gateway URL/portal-server-URL/
rewriter/JavaScript/variables/dhtml/images/test.html>"
var dhtmlVar="<a href=gateway URL/http://abc.sesta.com/images/test.html>"
var dhtmlVar="<img src=gateway-URL/
http://abc.sesta.com/images/test.html>"

// JavaScript DHTML 規則會識別右側的動態 HTML 內容,並將陳述式傳送至 HTML 規則。將套用 default_gateway_ruleset 中的 <Attribute name="src"/> 規則。由於此 URL 是絕對 URL,因此僅需前置閘道 URL。請確定您已於 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com 以便重新寫入此 URL。

//-->
</SCRIPT>
<br><br>
Testing DHTML Variables
<br><br>
<img src="gateway-URL/portal-server-URL/
rewriter/JavaScript/variables/dhtml/images/logo.gif">

// 重新寫入此行是因為已於 default_gateway_ruleset 中定義規則 <Attribute name="src"/>

<br><br>
Image
</body>
</html>

JavaScript DJS 變數的範例

Procedure使用 JavaScript DJS 變數範例

  1. 您可自下列路徑存取此範例:

    portal-server-URL /rewriter/JavaScript/variables/djs/djs.html

  2. 請確定您已於閘道服務的 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com。若未定義,則會採用直接連接,且不前置閘道 URL。

  3. 將此範例中指定的兩個規則新增 (若尚不存在) 至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset

  4. 重新啟動閘道:


    ./psadmin start-sra-instance –u amadmin – f  <password file> –N <profile name>– t  <gateway>
    

重新寫入前的 HTML 網頁

<html>
<head>
<title>Dynamic JavaScript Variable Test Page</title>
</head>
<body>
<script LANGUAGE="Javascript">
<!--
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;"
//-->
</SCRIPT>
<br>
Testing Dynamic JavaScript Variables
<br>
<img src="images/logo.gif">
<br>
Image
</body>
</html>

規則

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

重新寫入後的 HTML 網頁

<html>
<head>
<title>Dynamic JavaScript Variable Test Page</title>
</head>
<body>
<script LANGUAGE="Javascript">
<!--
var dJSVar="var dJSimgsrc=\qgateway-URL
/portal-server-URL/tmp/tmp/jpg\q;"
var dJSVar="var dJSimgsrc=\qgateway-URL
/portal-server-URL/rewriter/tmp/tmp/jpg\q;"
var dJSVar="var dJSimgsrc=\qgateway-URL
/http://abc.sesta.com/tmp/tmp/jpg\q;"

// 所有上述陳述式皆會使用閘道及 Portal Server URL 重新寫入。將依需要前置適當的路徑。第一個規則會將 dJSVar 右側識別為動態 JavaScript 變數。然後傳送至第二個規則;第二個規則會將 dJSimgsrc 右側識別為 URL 類型的 JavaScript 變數。將相應進行重新寫入。

//-->
</SCRIPT>
<br>
Testing Dynamic JavaScript Variables
<br>
<img src="gateway-URL/portal-server-URL
/rewriter/JavaScript/variables/djs/images/logo.gif">

// 重新寫入此行是因為已於 default_gateway_ruleset 中定義規則 <Attribute name="src"/>

<br>
Image
</body>
</html>

JavaScript SYSTEM 變數的範例

Procedure使用 JavaScript SYSTEM 變數範例

  1. 您可自下列路徑存取此範例:

    portal-server-URL /rewriter/JavaScript/variables/system/system.html

  2. 將此範例中指定的規則新增 (若尚不存在) 至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。

  3. 在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset

  4. 重新啟動閘道:


    ./psadmin start-sra-instance –u amadmin – f  <password file> –N <profile name>– t  <gateway>
    

重新寫入前的 HTML 網頁

<html>
<head>
<title>JavaScript SYSTEM Variables Test Page</title>
</head>
<body>
<script LANGUAGE="Javascript">
<!--
//SYSTEM Var
alert(window.location.pathname);
//document.write
("<A HREF="+window.location.pathname+">SYSTEM</A><P>")
//-->
</SCRIPT>
Testing JavaScript SYSTEM Variables
<br>
This page displays the path where 
the current page is located when loaded.
</body>
</html>

規則

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

重新寫入後的 HTML

<html>
<head>
<title>JavaScript SYSTEM Variables Test Page</title>
</head>
<body>
<SCRIPT>
convertsystem function definition...
</SCRIPT>
<script LANGUAGE="Javascript">
<!--
//SYSTEM Var
alert(psSRAPRewriter_convert_system
(window.location, window.location.pathname, "window.location"));

// Rewriter 會將 window.location.pathname 識別為 JavaScript SYSTEM 變數。此變數的值無法於伺服器端判定。因此 Rewriter 會在變數前前置 psSRAPRewriter_convert_pathname 函數。此包裝函數可於用戶端判定此變數的值,然後依需要重新寫入。

//-->
</SCRIPT>
Testing JavaScript SYSTEM Variables
<br>
This page displays the path where
the current page is located when loaded.
</body>
</html>

JavaScript URL 函數的範例

Procedure使用 JavaScript URL 函數範例

  1. 您可自下列路徑存取此範例:

    portal-server-URL /rewriter/JavaScript/functions/url/url.html

  2. 將此範例中指定的規則新增 (若尚不存在) 至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset

  3. 重新啟動閘道:


    ./psadmin start-sra-instance –u amadmin – f  <password file> –N <profile name>– t  <gateway>
    

重新寫入前的 HTML 網頁

<html>
<body>
JavaScript URL Function Test Page
<br>
<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>
</body>
</html>

規則

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

重新寫入後的 HTML 網頁

<html>
<body>
JavaScript URL Function Test Page
<br>
<script language="JavaScript">
<!--
function test(one,two,three)
{
alert(one + "##" + two + "##" +three);
}
test("/test.html","../test.html","123");
window.open("gateway-URL/portal-server-URL
/index.html","gen",width=500,height=500);
//-->
</SCRIPT>
</body>
</html>

JavaScript EXPRESSION 函數的範例

Procedure使用 JavaScript EXPRESSION 函數範例

  1. 您可自下列路徑存取此範例:

    <portal-install-location>/SUNWportal/samples/rewriter

  2. 將此範例中指定的規則新增 (若尚不存在) 至重新寫入 JavaScript 來源的規則部分的 default_gateway_ruleset 中。

  3. 使用 Portal Server 管理主控台中的 Rewriter 服務來編輯 default_gateway_ruleset

  4. 重新啟動閘道:


    ./psadmin start-sra-instance –u amadmin – f  <password file> –N <profile name>– t  <gateway>
    

重新寫入前的 HTML 網頁

<html>
<body>
JavaScript EXPRESSION Function Test Page
<br><br><br>
<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>
</body>
</html>

規則

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

重新寫入後的 HTML 網頁

<html>
<body>
JavaScript EXPRESSION Function Test Page
<br><br><br>
<script>
<!--
// various functions including psSRAPRewriter_
convert_expression appear here.//-->
</SCRIPT>
<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()));

// 此規則指出函數 jstest1 中類型為 EXPRESSION 的第一個參數需要重新寫入。此表示式的值為 /test/images/test.html。此值會被前置 Portal Server URL 與閘道 URL。

document.write("<a HREF="+test1+">Test</a>");
alert(test1);
//-->
</SCRIPT>
</body>
</html>

JavaScript DHTML 函數的範例

Procedure使用 JavaScript DHTML 函數範例

  1. 您可自下列路徑存取此範例:

    portal-server-URL /rewriter/JavaScript/functions/dhtml/dhtml.html

  2. 將此範例中指定的規則新增 (若尚不存在) 至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。

  3. 在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset

  4. 重新啟動閘道:


    ./psadmin start-sra-instance –u amadmin – f  <password file> –N <profile name>– t  <gateway>
    

重新寫入前的 HTML 網頁

<html>
<head>
Testing JavaScript DHTML Functions
<br>
<br>
<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>
</head>
<body BGCOLOR=white>
<br><br>
Testing document.write and document.writeln
</body>
</html>

規則

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

重新寫入後的 HTML 網頁

<html>
<head>
Testing JavaScript DHTML Functions
<br>
<br>
<script>
<!--
document.write(\q<a href="gateway-URL
/portal-server-URL/index.html">write</a><BR>\q)

// 第一個規則指出 DHTML JavaScript 函數 document.write 的第一個參數需要重新寫入。Rewriter 會將第一個參數識別為一個簡單的 HTML 陳述式。在 default_gateway_ruleset 中的 HTML 規則部分具有規則 <Attribute name="href" />,此規則指出此陳述式需重新寫入。

document.writeln(\q<a href="gateway-URL
/portal-server-URL/rewriter/JavaScript/functions/dhtml/index.html">writeln</a><BR>\q)

// 第二個規則指出 DHTML JavaScript 函數 document.writeln 的第一個參數需要重新寫入。Rewriter 會將第一個參數識別為一個簡單的 HTML 陳述式。在 default_gateway_ruleset 中的 HTML 規則部分具有規則 <Attribute name="href" />,此規則指出此陳述式需重新寫入。

document.write("http://abc.sesta.com/index.html<BR>")
document.writeln("http://abc.sesta.com/index.html<BR>")

// 雖然 DHTML 規則識別出函數 document.writedocument.writeln,但上述陳述式並未重新寫入。這是因為這個情況下的第一個參數並非簡單 HTML。其可能是任何字串而 Rewriter 不知如何將之重新寫入。

//-->
</SCRIPT>
</head>
<body BGCOLOR=white>
<br><br>
Testing document.write and document.writeln
</body>
</html>

JavaScript DJS 函數的範例

Procedure使用 JavaScript DJS 函數範例

  1. 您可自下列路徑存取此範例:

    portal-server-URL /rewriter/JavaScript/functions/djs/djs.html

  2. 請確定您已於閘道服務的 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com

    若未定義,則會採用直接連接,且不前置閘道 URL。

  3. 將此範例中指定的規則新增 (若尚不存在) 至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset

  4. 重新啟動閘道:


    ./psadmin start-sra-instance –u amadmin – f  <password file> –N <profile name>– t  <gateway>
    

重新寫入前的 HTML 網頁

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

規則

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

重新寫入後的 HTML 網頁

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

// abc.sesta.com 是閘道服務的 [網域與子網域的代理伺服器] 清單中的一項。因此 Rewriter 需要重新寫入此 URL。但因為是絕對 URL,因此不需前置 Portal Server URL。DJS 規則指出 DJS 函數 NavBarMenuItem 的第二個參數需重新寫入。但是第二個參數又是 JavaScript 變數。重新寫入此變數的值需要第二個規則。第二個規則指出 JavaScript 變數 top.location 的值需重新寫入。由於符合所有條件,因此重新寫入 URL。

//menu.addItem(new NavBarMenuItem("All Available Information","http://abc.sesta.com"));

// 雖然 DJS 規則指出函數 NavBarMenuItem 的第二個參數需要重新寫入,但此陳述式中並未進行重新寫入。這是因為 Rewriter 未將第二個參數識別為簡單 HTML。

</script>
</html>

XML 屬性範例

Procedure使用 XML 屬性範例

  1. 您可自下列路徑存取此範例:

    portal-server-URL /rewriter/XML/attrib.html

  2. 將此範例中指定的規則新增 (若尚不存在) 至 [重新寫入 XML 來源的規則] 部分的 default_gateway_ruleset 中。

  3. 在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset

  4. 重新啟動閘道:


    ./psadmin start-sra-instance –u amadmin – f  <password file> –N <profile name>– t  <gateway>
    

重新寫入前的 XML

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

規則

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

重新寫入後的 HTML

<html>
Rewriting starts
<br>
<br>
<body>
<xml><baseroot href="/root.html"/></xml>
<xml><img href="image.html"/></xml>
<xml><string href="1234|substring.html"/></xml>
<xml><check href="1234|gateway-URL/portal-server-URL
/rewriter/XML/string.html"/></xml>

// 重新寫入此陳述式是因為其符合規則中所指定的條件。Attribute namehreftagcheckvaluePatterns 1234。valuePatterns 之後所接的字串會被重新寫入。請參閱在規則中與式樣相符以取得 valuePatterns 的詳細資訊。

</body>
Rewriting ends
</html>

案例研究

本節包括某範例郵件用戶端的來源 HTML 網頁。此案例研究並未囊括所有可能的情況與規則。這只是一個範例規則集,用以幫助您為自己的企業內部網路網頁收集規則。

假設狀況

針對此案例研究訂出下列假設狀態:

範例網頁 1

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0053)http://abc.siroe.com/mailclient/destin/?Cmd=navbar -->
<HTML XMLNS:WM><HEAD>
<META http-equiv=Content-Type content="text/html; CHARSET=utf-8">
<META http-equiv=Pragma content=no-cache>
<META http-equiv=Expires content=0><!--Copyright (c) 2000 Microsoft Corporation.
All rights reserved.--><!--CURRENT FILE== "IE5" "WIN32" navbar -->
<STYLE>WM\\:DROPMENU {
BEHAVIOR: url(http://abc.siroe.com/mailweb/controls/dropmenu.htc)
}
</STYLE>
<LINK href="destin_files/navbar.css" type=text/css rel=stylesheet>
<SCRIPT language=javascript>
var g_szUserBase= "http://abc.siroe.com/mailclient/destin"+"/";
var g_szFolder= ".";
var g_szVirtualRoot= "http://abc.siroe.com/mailweb";
var g_szImagePath= g_szVirtualRoot + "/img/";
</SCRIPT>
<SCRIPT src="/destin_files/navbar.js"></SCRIPT>
<META content="MSHTML 6.00.2600.0" name=GENERATOR></HEAD>
<BODY oncontextmenu=return(event.ctrlKey); onselectstart=return(false);
id=outbar_mainbody style="BACKGROUND-COLOR: appworkspace" leftMargin=0
topMargin=0 scroll=no>
<TABLE class=nbTableMain id=nbTableMain style="HEIGHT: 100%" cellSpacing=0
cols=1 cellPadding=0 rows="2">
<TBODY>
<TR>
<TD class=treeBrand>
<DIV class=treeOFLOW><IMG
style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px"
src="/destin_files/logo-ie5.gif" border=0></DIV></TD></TR>
<TR height="100%">
<TD>
<TABLE class=nbTable cellSpacing=0 cols=1 cellPadding=0 rows="4">
<TBODY>
<TR>
<TD class=nbFlybar id=show_navbar onkeydown=flybar_keydown()
onclick=ToggleTab(this.id) tabIndex=0 noWrap>
<DIV class=treeOFLOW>Shortcuts</DIV></TD></TR>
<TR style="HEIGHT: 100%">
<TD id=idOutbarpane style="TEXT-ALIGN: center" vAlign=top><A
id=inbox
href="http://abc.siroe.com/mailclient/destin/Inbox/?Cmd=contents&amp;Page=1"
target=viewer alt="Go to inbox"><IMG class=nbImage alt="Go to inbox"
src="destin_files/navbar-inbox.gif"></A>
<DIV class=nbLabel>Inbox</DIV><BR><A id=calendar
href="http://abc.siroe.com/mailclient/destin/Calendar/?Cmd=contents"
target=viewer alt="Go to calendar"><IMG class=nbImage
alt="Go to calendar" src="destin_files/navbar-calendar.gif"></A>
<DIV class=nbLabel>Calendar</DIV><BR><A id=contacts
            href="http://abc.siroe.com/mailclient/destin/Contacts/?Cmd=contents"
target=viewer alt="Go to contacts"><IMG class=nbImage
alt="Go to contacts" src="destin_files/navbar-contacts.gif"></A>
<DIV class=nbLabel>Contacts</DIV><BR><A id=options
href="http://abc.siroe.com/mailclient/destin/?Cmd=options"
target=viewer alt="Go to options"><IMG class=nbImage
alt="Go to options" src="destin_files/navbar-options.gif"></A>
<DIV class=nbLabel>Options</DIV></TD></TR>
<TR style="HEIGHT: 1.5em">
<TD class=nbFlybar id=show_folders onkeydown=flybar_keydown()
onclick=ToggleTab(this.id) tabIndex=0 noWrap>
<DIV class=treeOFLOW>Folders</DIV></TD></TR>
<TR>
<TD class=nbTreeProgress id=treeProgress style="DISPLAY: none"
vAlign=top noWrap><SPAN id=idLoading
style="OVERFLOW: hidden">Loading...</SPAN>
</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
</BODY></HTML>

描述

描述顯示範例規則集與案例研究之間的對應關係。

表 4–3 範例規則集與案例研究之間的對映

網頁內容 

套用的規則 

Rewriter 輸出 

描述 

var g_szVirtualRoot=
"http://abc.siroe.com/mailweb";

<Variable name="URL"> g_szVirtualRoot </Variable> 

var g_szVirtualRoot= 
"http://gateway.sesta.com
/http://abc.siroe.com/mailweb";

g_szVirtualRoot 是一個變數,其值為簡單 URL。

此規則告知 Rewriter 搜尋 URL 類型的 g_szVirtualRoot 變數。若網頁中有這類變數,則 Rewriter 會將之轉換為絕對 URL,然後前置閘道 URL。

src="/destin_files/
logo-ie5.gif"

<Attribute name="src" /> 

src="http://gateway.sesta.com/
http://abc.siroe.com/
destin_files/logo-ie5.gif

src 是屬性名稱,未附有任何標記或 valuePattern。 

此規則告知 Rewriter 搜尋所有名稱為 src 的屬性,然後重新寫入該屬性的值。

href="http://abc.siroe.com

/mailclient/destin/Inbox/
?Cmd=contents&amp;Page=1"

<Attribute name="href"/>

href="http://gateway.sesta.com/
http://abc.siroe.com
/mailclient/destin/
Inbox/?Cmd=contents&amp;Page=1"

href 是屬性名稱,未附有任何標記或 valuePattern。 

此規則告知 Rewriter 搜尋所有名稱為 href 的屬性,然後重新寫入該屬性的值。


備註 –

套用規則集的優先順序為 hostname-subdomain-domain

例如,假設您的以網域為基礎規則集清單中包含下列項目:

sesta.com|ruleset1
eng.sesta.com|ruleset2
host1.eng.sesta.com|ruleset3

ruleset3 可套用於 host1 上的所有頁面。

ruleset2 可套用於 eng 子網域中的所有頁面,除了擷取於 host1 中的頁面。

ruleset1 可套用於 sesta.com 網域中的所有頁面,除了擷取於 eng 子網域與 host1 中的頁面。


  1. 按一下 [儲存] 完成作業。

  2. 從終端機視窗重新啟動閘道:


    ./psadmin start-sra-instance –u amadmin – f  <password file> –N <profile name>– t  <gateway>
    

Outlook Web Access 的規則集

Secure Remote Access 伺服器支援 Sun Java System Web Server 和 IBM 應用程式伺服器上 Outlook Web Access (OWA) 的 MS Exchange 2000 SP3 以及 MS Exchange 2003 安裝。

Procedure配置 OWA 規則集

  1. 以管理員身份登入 Portal Server 管理主控台。

  2. 選取 [Secure Remote Access] 標籤,並選取要設定屬性的閘道設定檔。

  3. 在 [對映 URI 至規則集] 欄位中,輸入安裝 Exchange 2000 的服務其名稱,隨後輸入 Exchange 2000 Service Pack 4 OWA 規則集。

    例如:


    exchange.domain.com|exchange_2000sp3_owa_ruleset.

使用公用資料夾

在 Exchange 端,「公用資料夾」被配置為使用 NTLM 授權。必須將它變更為使用 HTTP Basic Authorization。

要執行此作業,請至 Exchange 伺服器,選取 [控制台] -->[系統管理工具],然後開啟 [網際網路資訊服務]。

在 [預設網站] 下,有一個名為 [公用] 的「公用資料夾」標籤。按一下滑鼠右鍵,然後選取 [內容]。按一下 [目錄安全性] 標籤。在 [匿名存取及認證] 控制台上,選取 [編輯...]。消取選取所有其他選項,僅勾選 [Basic Authentication]。

6.x 與 3.0 規則集對映

下表列出 Secure Remote Access 伺服器 Rewriter 規則與前版 Portal Server 產品的對映關係。

表 4–4 SP3 規則對映

Rewriter 6.0 DTD 元素 

Rewriter 3.0 清單方塊名稱 

HTML 內容的規則

 

屬性 - URL 

重新寫入 HTML 屬性 

屬性 - DJS 

重新寫入包含 JavaScript 的 HTML 屬性 

表單 

重新寫入表單輸入標記清單 

Applet 

重新寫入 Applet/物件參數值清單 

JavaScript 內容的規則

 

變數 - URL 

重新寫入 URL 中的 JavaScript 變數 

變數 - EXPRESSION 

重新寫入 JavaScript 變數函數 

變數 - DHTML 

重新寫入 HTML 中的 JavaScript 變數 

變數 - DJS 

重新寫入 JavaScript 中的 JavaScript 變數 

變數 - SYSTEM 

重新寫入 JavaScript 系統變數 

函數 - URL 

重新寫入 JavaScript 函數參數 

函數 - EXPRESSION 

重新寫入 JavaScript 函數參數函數 

函數 - DHTML 

重新寫入 HTML 中 JavaScript 函數參數函數 

函數 - DJS 

重新寫入 JavaScript 中的 JavaScript 函數參數 

XML 內容的規則

 

屬性 - URL 

重新寫入 XML 文件的屬性值 

標記文字 

重新寫入 XMl 文件的文字資料 

CSS 內容的規則

 

不需使用規則。依預設,所有 URL 皆會被轉譯。 

 

WML 內容的規則

 

未定義任何規則。按 HTML 處理 WML,並會套用 HTML 規則。 

 

WMLScript 內容的規則

 
   

不支援 WML 程序檔