Sun ONE Portal Server, Secure Remote Access 6.2 管理員指南 |
第 3 章
Rewriter本章說明如何定義 Rewriter 規則,以及如何在 Sun ONEPortal Server 管理主控台中配置 Rewriter。
其中涵蓋下列主題:
Rewriter 摘要Secure Remote Access 的 Rewriter 元件允許一般使用者利用修改網頁上的單一資源指示碼 (Uniform Resource Identifier,URI) 參照,以指向「閘道」從而瀏覽內部網路。URI 可定義於任何已註冊名稱空間內封裝名稱的方法,並以該名稱空間為其加標記。最常見的 URI 種類為單一資源定址器 (URL)。URL 可具備如 http、ftp、mailto、file 及 news 等多種通訊協定。
所有的標準 URL,如 RFC-1738 所指定且及通訊協定為 HTTP 或 HTTPS,皆由 Rewriter 識別與改寫。通訊協定不區分大小寫。例如 hTtP、HTtp 與 httP 皆為有效的格式。以下列出一些 URL 範例:
http://www.my.work.com/
http://www.w3.org:8000/imaginary/test
http://www.myu.edu/org/admin/people#andy
http://info.my.org/AboutUs/Index/Phonebook?dobbins
http://www.w3.org/RDB/EMP?where%20name%3Ddobbins
http://info.my.org/AboutUs/Phonebook
http://user:password@abc.com
Rewriter 可改寫部分由 Internet Explore 與 Netscape 所支援的基本非標準 URL。將非標準 URL 轉換為標準格式所需的資訊,會從顯示 URL 的頁面的基準 URL 擷取。此資訊可包括:
Rewriter 僅支援相對 URL 中包含反斜線符號。
例如,
http://abc.sesta.com\index.html 會被改寫,
下列 URL 不會被改寫:
http:\\abc.sesta.com。
http:/abc.com
Rewriter 使用方案使用者試圖經由「閘道」存取內部網路網頁時,即可使用 Rewriter 來順利存取網頁。下列元件會使用 Rewriter:
URLScraper
URL Scraper 提供者會從已配置的 URI 中取得內容,並在將內容傳送至瀏覽器之前,將所有相對 URI 擴展至絕對 URI。
例如,若使用者試圖存取含有下列內容的網站:
<a href="../mypage.html">
Rewriter 會將此轉譯為:
<a href="http://yahoo.com/mypage.html">
其中 http://yahoo.com/test/ 是網頁的基準 URL。
有關 URLScraper 提供者的詳細資訊,請參閱Sun ONE 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 配置」子區段定義規則集。
有關定義規則集的詳細資訊,請參閱Sun ONE Portal Server 管理員指南。建立新規則集後,您必須定義所需規則。
本節涵蓋下列主題:
公開介面 (規則集 DTD)
<?xml version="1.0" encoding="UTF-8"?>
<!--
The following constraints are not represented in DTD, but taken care programatically
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 alway 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>
撰寫規則的步驟
您可遵照下列的一般步驟來撰寫規則。
規則集指導方針
請牢記下列事項:
- 所有的規則都必須包含在 <RuleSet> </RuleSet> 標記內。
- 將所有需改寫 HTML 內容的規則納入規則集的 <HTMLRules> </HTMLRules> 區段。
- 將所有需改寫 JavaScript 內容的規則納入規則集的 <JSRules> </JSRules> 區段。
- 將所有需改寫 XML 內容的規則納入規則集的 <XMLRules> </XMLRules> 區段。
- 請在您的內部網路網頁中,識別出需改寫的 URL,然後將所需規則納入規則集的相應區段 (HTML、JSRules 或 XMLRules)。
- 將規則集指派至所需網域。有關詳細資料,請參閱「建立 URI 與規則集對映清單」。
- 重新啟動「閘道」以使變更產生作用:
gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start
定義規則集根元素
規則集根具有兩種屬性:
定義以語言為基礎的規則 (定義規則)規則以下列語言為基礎:
用於 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 是:
http://mymachine.intranet.com/mypage.html
網頁內容
<a href="http://mymachine.intranet.com/mypage.html>
規則
<Attribute name="href"/>
or
<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('/focus.html','focus');return;">
</Form>
規則
<Attribute name=”onClick” type=”DJS”/>
<Function type="URL" name="Check" paramPatterns="y,"/>
輸出
<Form>
<INPUT TYPE=TEXT SIZE=20 value=focus onClick="Check('gateway-URL/http://abc.sesta.com/focus.html','focus');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>
若要改寫出現在名為 abc1 (form1 的一部分) 隱藏欄位值中的 /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/applet code” code=”RewriteURLinApplet.class” archive=”/test.jar”>
<param name=”Test1” value="gateway-URL/http://abc.siroe.com/index.html">
</APPLET>
說明
將改寫 codebase attribute ,因為 <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 之後的內容 (可選、預設 "" 表示需改寫 fullvalue)。請參閱「在規則中使用式樣匹配」。
在 valuePatterns 中使用萬用字元
您可使用 * 字元來完成用於改寫的式樣匹配。
在 valuePatterns 欄位中,您不能僅指定一個 *。因為 * 表示與所有項目匹配,valuePattern 後將不會有任何項目,因此 Rewriter 也就沒有可改寫的項目。您可利用其他字串與 * 連用,如 *abc。在這種情況下,即會改寫所有位於 *abc 之後的內容。
您可以利用 * 或 ** 與顯示在原始陳述式中的分隔字元連用,以分隔多個欄位。一個萬用字元 (*) 會與不需改寫的所有欄位匹配,而兩個萬用字元 (**) 則會與需改寫的所有欄位匹配。
表 3-1 列出 * 萬用字元的部分範例使用方法。此表格具有三欄。第一個欄列出待改寫的範例陳述式。第二欄列出範例 valuePatterns 值。第三欄說明如何改寫。
用於 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 imgsrc2=imgsrc1;
//-->
</SCRIPT>
說明
所有 URL 類型的變數及名稱以 imgsrc 開頭的變數皆會被改寫。在輸出的第一行,會前置顯示變數的閘道 URL 與網頁 URL。第二行已包含絕對路徑,因此僅會前置閘道 URL。第三行 var imagsrc2 將不會被改寫,因為其值並非字串,而是另一個 JavaScript 值。
EXPRESSION 變數
表示式變數的右側會有一個表示式。此表示式會產生一個 URL。Rewriter 會將 JavaScript 函數 (psSRAPRewriter_convert_expression) 附加至 HTML 網頁,因為其無法在伺服器上計算這類表示式的值。此函數會將表示式視為參數,並在用戶端瀏覽器中計算所需 URL 值。
若您不確定陳述式包含的是簡單 URL 或 EXPRESSION URL,我們建議您使用表示式規則,因為其可處理兩種情況。
本節分為下列部分:
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"/>
or
<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=?em class="cEmphasis">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"/>
or
<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.htm l>"
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/ima ges/test.html>"
//-->
</SCRIPT>
說明
JavaScript 剖析器會讀取 dhtmlVar 的值,以作為 HTML 內容,並經由 HTML 剖析器傳送內容。HTML 剖析器會套用符合 href 屬性規則的 HTML 規則,並改寫。
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='/tmp/tmp.jpg';"
var dJSVar="var dJSimgsrc='../tmp/tmp.jpg';"
var dJSVar="var dJSimgsrc='http://abc.sesta.com/tmp/tmp.jpg';"
規則
<Variable name="DJS">dJSVar/>
<Variable name="URL">dJSimgsrc/>
輸出
//DJS Var - need 2 rules
var dJSVar="var dJSimgsrc='gateway-URL/http://abc.sesta.com/tmp/tmp.jpg';"
var dJSVar="var dJSimgsrc='gateway-URL/http://abc.sesta.com/dir1/dir2/dir3/jscript/tmp/tmp.jp g';"
var dJSVar="var dJSimgsrc='gateway-URL/http://abc.sesta.com/tmp/tmp.jpg';"
說明
此處必須使用兩個規則。第一個規則可找到動態 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.c om/test/rewriter/test1/jscript/test.html","123");
window.open("gateway-URL/http://abc.sesta.com/index.html","gen",width=500,heig ht=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"/>
or
<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>
說明
因將之視為 EXPRESSION 函數參數,因此這個規則指出 jstest1 函數的第一個參數需要改寫。在網頁內容範例中,第一個參數是僅在執行時間中計算其值的表示式。Rewriter 會將 psSRAPRewriter_convert_expression 函數前置於此表示式之前。從而計算此表示式,並且 psSRAPRewriter_convert_expression 函數在執行時間中改寫輸出。
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('<a href="/index.html">write</a><BR>')
document.writeln('<a href="index.html">writeln</a><BR>')
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('<a href="gateway-URL/http://xyz.siroe.com/index.html">write</a><BR>')
document.writeln('<a href="gateway-URL/http://xyz.siroe.com/test/rewriter/test1/jscript/JSFUNC/inde x.html">writeln</a><BR>')
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='http://abc.sesta.com'"));
</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='gateway-URL/http://abc.sesta.com'"));
</script>
說明
第一個規則指出包含 JavaScript 的 NavBarMenuItem 函數中的第二個參數需要改寫。在 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 的屬性規則類似。請參閱「用於 HTML 內容的屬性規則」(第 118 頁)。其間的差異在於: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.h tml"/>
</xml>
說明
上列範例中,僅改寫第四行,因為其符合規則中所指定的所有條件。請參閱「在規則中使用式樣匹配」(第 116 頁)。
用於 Cascading Style Sheet (串接樣式表) 的規則
HTML 網頁中的 Cascading Style Sheet (包含 CCS2) 會被轉譯。沒有任何針對此轉譯而定義的規則,因為 URL 僅出現在 url() 函數與 CSS 的匯入語法中。
用於 WML 的規則
WML 與 HTML 類似,因此 HTML 規則適用於 WML 內容。請對 WML 內容使用通用規則集。請參閱「用於 HTML 內容的規則」。
在「閘道」服務中配置 Rewriter藉由使用「Rewriter」標籤下的「閘道」服務,您可以執行下列兩種工作 - 基礎與進階:
基礎作業
啟用所有 URL 的重寫
若您啟用「閘道」服務中的「啟用所有 URI 的重寫」選項,則 Rewriter 會改寫任何 URL 而不會將其於「網域與子網域的代理伺服器」中的項目進行核對。便會忽略「網域與子網域的代理伺服器」清單中的項目。
若要使得閘道可重寫所有 URL
建立「URI 至規則集對映」清單
規則集會建立於 Identity Server 管理主控台中 Portal Server 配置之下的 Rewriter 服務中。有關詳細資料,請參閱Sun ONE Portal Server 管理員指南 。
建立規則集後,您可使用「URI 至規則集對映」清單將網域與規則集相關聯。依預設,下列兩個項目會加入至「URI 至規則集對映」清單:
這表示,網域為 sun.com 之入口網站目錄的所有網頁,將套用 default_gateway_ruleset。對於其他頁面,則套用常規規則集。default_gateway_ruleset 與 generic_ruleset 是預先封裝的規則集。
備註
對於所有顯示於入口網站桌面中的內容,將使用 default_gateway_ruleset 規則集,與取得內容處無關。
例如,假設入口網站桌面被配置為從 URL yahoo.com 取得內容,但該 Portal Server 位於 sesta.com,則會套用 sesta.com 的規則集至取得的內容。
在語法中使用萬用字元
您可對映一個完全合格的 URI 或在規則集中使用星號來對映部分 URI。
例如,您可以將 java_index_page_ruleset 套用至 index.html 網頁,如下所示:
或者,您可以將 java_directory_ruleset 套用至 Java 目錄下的所有網頁,如下所示:
www.sun.com/java/* /java_directory_ruleset
若要將 URI 對映至規則集
- 以管理員的身份登入 Identity Server 管理主控台。
- 選取「服務配置」標籤。
- 按一下「SRA 配置」下「閘道」旁的箭頭。
將顯示「閘道設定檔」頁面。
- 按一下您想要設定其屬性的「閘道」設定檔。
顯示閘道 - gateway-profile-name 頁面。
- 按一下「Rewriter」標籤。
- 捲動至「URI 至規則集對映」欄位。
- 在「URI 至規則集對映」欄位中鍵入需要的網域或主機名稱以及規則集並按一下「新增」。
此項目會新增至「URI 至規則集對映」清單。
指定網域或主機名稱以及規則集的格式如下所示:
domain name|ruleset name
例如:
eng.sesta.com|default
建立剖析器至 MIME 對映清單
Rewriter 有四個不同的剖析器以根據 HTML、JAVASCRIPT、CSS 與 XML 等內容類型剖析網頁。依預設共用 MIME 類型會與這些剖析器相關。您可以在「閘道」服務中的「剖析器至 MIME 對應」欄位中將新 MIME 類型與這些剖析器相關聯。此將 Rewriter 功能延伸至其他 MIME 類型。
使用分號或逗號 (";" 或 ",") 分隔多個項目:
例如:
HTML=text/html;text/htm;text/x-component;text/wml; text/vnl/wap.wml
意味任何含有這些 MIME 的內容會被傳送到 HTML Rewriter 而 HTML 規則將被套用以重寫 URL。
若要指定 MIME 對映
- 以管理員的身份登入 Identity Server 管理主控台。
- 選取「服務配置」標籤。
- 按一下「SRA 配置」下「閘道」旁的箭頭。
將顯示「閘道設定檔」頁面。
- 按一下您想要設定其屬性的「閘道」設定檔。
顯示閘道 - gateway-profile-name 頁面。
- 按一下「Rewriter」標籤。
- 捲動至「剖析器至 MIME 對映」欄位,並在編輯方塊中新增需要的 MIME 類型。使用分號或逗號以分隔多個項目。
以 HTML=text/html;text/htm 格式指定項目
- 按一下「新增」以新增需要的項目至清單中。
- 按一下頁面頂端或底部的「儲存」記錄變更。
- 從終端機視窗重新啟動「閘道」:
portal-server-install-root/SUNWps/bin/gateway -n gateway-profile-name start
指定預設網域與子網域
當 URL 僅包括主機名稱而沒有網域與子網域時,預設網域與子網域將特別有用。在此情況下,「閘道」將假設主機名稱位於預設網域與子網域中,並繼續執行相應的操作。
例如,若 URL 中的主機名稱為 host1,且預設網域與子網域被指定為 red.sesta.com,則主機名稱會被解析為 host1.red.sesta.com。
若要指定預設網域與子網域
進階作業
建立不會重寫的 URI 清單
若要指定預設網域與子網域
- 以管理員的身份登入 Identity Server 管理主控台。
- 選取「服務配置」標籤。
- 按一下「SRA 配置」下「閘道」旁的箭頭。
將顯示「閘道設定檔」頁面。
- 按一下您想要設定其屬性的「閘道」設定檔。
顯示閘道 - gateway-profile-name 頁面。
- 按一下「Rewriter」標籤,「進階」子區段。
- 捲動至「不要重寫 URI 清單」欄位,並在編輯方塊中新增 URI。
備註:將 #* 新增至此清單中,以允許重寫 URI (即使 href 規則為規則集的一部分)。
- 按一下頁面頂端或底部的「儲存」記錄變更。
- 從終端機視窗重新啟動「閘道」:
gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start
啟用 MIME 推測
Rewriter 會根據網頁的 MIME 類型選擇剖析器。有些網路伺服器,如 WebLogic 和 Oracle,並不會傳送 MIME 類型。若要解決這個問題,可以啟用 MIME 推測,方法是新增資料至「剖析器至 URI 對映」清單方塊。
若要啟用 MIME 推測
建立「剖析器至 URI 對映」清單
若已啟用 MIME 推測核取方塊,且伺服器沒有傳送 MIME 類型,可使用這個清單方塊以對映剖析器至 URI。
由分號分隔多個 URI。
例如 HTML=*.html; *.htm;*Servlet
表示 HTML Rewriter 會用於改寫任何含有 html、htm 或 Servlet 副檔名的頁面內容。
若要剖析 URI 對映
啟用混淆
「混淆」允許 Rewriter 改寫 URI,如此即可隱藏網頁的「內部網路 URL」。
若要啟用混淆
指定混淆器種子字串
種子字串會用於 URI 的混淆。其為一個由混淆演算法產生的隨機字串。
若要指定混淆種子字串
建立不要混淆的 URI 清單
某些應用程式 (例如 applet) 需要網際網路 URI 且無法被混淆。若要指定那些應用程式,請新增 URI 至清單方塊。
例如您新增
*/Applet/Param*
至此清單方塊,則如果內容 URI http://abc.com/Applet/Param1.html 與規則集中的規則匹配,將不會混淆 URL。
若要指定「不要混淆 URI 清單」
- 以管理員的身份登入 Identity Server 管理主控台。
- 選取「服務配置」標籤。
- 按一下「SRA 配置」下「閘道」旁的箭頭。
將顯示「閘道設定檔」頁面。
- 按一下您想要設定其屬性的「閘道」設定檔。
顯示「閘道」- gateway-profile-name 頁面。
- 按一下「Rewriter」標籤,「進階」子區段。
- 捲動至「不要混淆 URI 清單」欄位,並新增 URI 至編輯方塊。
- 按一下頁面頂端或底部的「儲存」記錄變更。
- 從終端機視窗重新啟動「閘道」:
gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start
讓閘道通訊協定與原始 URI 通訊協定相同
當閘道以 http 及 https 模式執行時,可以啟用 Rewriter 以使用一致的通訊協定存取 HTML 內容中的參照資源。
例如,若原始 URL 是 http://intranet.com/Public.html,則會新增 http 閘道。若原始 URL 是 https://intranet.com/Public.html,則會新增 https 閘道。
若要讓閘道通協定與原始 URI 通訊協定相同
使用除錯日誌排除故障若要排除 Rewriter 的故障,您需啟用除錯日誌。
除錯訊息分類如下:
設定 Rewriter 除錯層級
若要設定 Rewriter 除錯層級
- 以超級使用者身份登入閘道機器,然後編輯下列檔案:
gateway-install-root/SUNWam/lib/AMConfig.properties
- 設定除錯層級:
com.iplanet.services.debug.level=
除錯層級為:
error - 僅在除錯檔案中記錄嚴重錯誤。在此種錯誤發生時,Rewriter 通常會停止運作。
warning - 記錄警告訊息。
message - 記錄所有除錯訊息。
off - 不會記錄任何除錯訊息。
- 在 AMConfig.properties 檔案的下列屬性中,指定除錯檔案目錄:
com.iplanet.services.debug.directory=/var/opt/SUNWam/debug
其中 /var/opt/SUNWam/debug 是預設的除錯目錄。
- 從終端機視窗重新啟動「閘道」:
gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start
除錯檔案名稱
當除錯層級設定為 message 時,除錯指令會產生一組檔案。表 3-2 列出 Rewriter 檔案,及其中所包含的資訊。第一欄為除錯檔案的名稱,第二欄則說明檔案包含的內容。
除了上述檔案之外,Rewriter 會產生一個用於未留存於上述檔案中的其他除錯訊息的檔案。檔案名稱包括兩個部分:第一部分為 pwRewriter 或 psSRARewriter,第二部分則為使用 portal 或 gateway profile name 的副檔名。
除錯檔案會顯示在入口網站或閘道中。這些檔案存放於 AMConfig.properties 檔案中指示的目錄中。
Rewriter 元件會產生下列檔案組以協助除錯作業:
prefix_RuleSetInfo.extension
prefix_OrginalPages.extension
prefix_RewrittenPages.extension
prefix_UnaffectedPages.extension
prefix_URIInfo.extension
其中
prefix 為用於 URLScraper 用途日誌的 psRewriter 或用於閘道用途日誌的 psSRAPRewriter。
extension 則為用於 URLScaper 用途的 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 內容範例
HTML 屬性範例
若要使用 HTML 屬性範例
您不需將此範例中指定的規則新增至 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.gi f">../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 (附有所需子目錄)。 此連結將無法作用,因為在所提供之範例結構的 HTML 目錄下沒有名為 images 的目錄。
Rewriting ends
</html>
HTML 動態 JavaScript 記號的範例
若要使用 HTML JavaScript 記號範例:
- 您可自下列路徑存取此範例:
portal-server-URL/rewriter/HTML/jstokens/JStokens.html
- 將此範例中指定的規則新增至「改寫 JavaScript 來源的規則」部分的 default_gateway_ruleset 中。
- 在 Identity Server 管理主控台「Portal Server 配置」中的「Rewriter 服務」中編輯 default_gateway_ruleset。
- 從終端機視窗重新啟動「閘道」:
gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start
進行改寫前的 HTML
<html>
<head>
Rewriting starts
<script language="javascript">
function Check(test,ind){
if (ind == 'blur')
{alert("testing onBlur")}
if (ind == 'focus')
{alert("testing onFocus")}
}
</SCRIPT>
</head>
<body>
<form>
<input TYPE=TEXT SIZE=20 value=blur onAbort="Check('/indexblur.html','blur');return;">
<input TYPE=TEXT SIZE=20 value=blur onBlur="Check('/indexblur.html','blur');return;">
<input TYPE=TEXT SIZE=20 value=focus onFocus="Check('/focus.html','focus');return;">
<input TYPE=TEXT SIZE=20 value=focus onChange="Check('/focus.html','focus');return;">
<input TYPE=TEXT SIZE=20 value=focus onClick="Check('/focus.html','blur');return;">
<br><br>
</form>
</body>
Rewriting ends
</html>
規則
<Attribute name=”onClick” type=”DJS”/>
<Function type="URL" name="Check" paramPatterns="y"/>
進行改寫後的 HTML
<html>
<head>
Rewriting starts
<script language="javascript">
function Check(test,ind){
if (ind == 'blur')
{alert("testing onBlur")}
if (ind == 'focus')
{alert("testing onFocus")}
}
</SCRIPT>
</head>
<body>
<form>
<input TYPE=TEXT SIZE=20 value=blur onAbort="Check('gateway URL/portal-server-URL/indexblur.html','blur');return;">
<input TYPE=TEXT SIZE=20 value=blur onBlur="Check('gateway URL/portal-server-URL/indexblur.html','blur');return;">
<input TYPE=TEXT SIZE=20 value=focus onFocus="Check('gateway URL/portal-server-URL/focus.html','focus');return;">
<input TYPE=TEXT SIZE=20 value=focus onChange="Check('gateway URL/portal-server-URL/focus.html','focus');return;">
<input TYPE=TEXT SIZE=20 value=focus onClick="Check('gateway URL/portal-server-URL/focus.html','blur');return;">
// 此範例中的所有陳述式都已改寫。每次改寫都會前置 Gateway 與 Portal Server URL。 這是因為 onAbort、onBlur、onFocus、onChange 與 onClick 的規則都已在 default_gateway_ruleset 檔案中定義。 Rewriter 會偵測 JavaScript 記號,並將之傳送至 JavaScript 函數規則中以便進行進一步的處理。 此範例中的第二個規則會告知 Rewriter 該改寫哪一個參數。
</body>
<br>
Rewriting ends
</html>
HTML 表單範例
若要使用表單範例
- 您可自下列路徑存取表單範例:
portal-server-URL/rewriter/HTML/forms/formrule.html
- 請確定您已於「閘道」服務的「網域與子網域的代理伺服器」清單中定義 abc.sesta.com。
若未定義,則會採用直接連接,且不前置閘道 URL。
- 將此範例中指定的規則新增至「改寫 HTML 屬性的規則」部分的 default_gateway_ruleset 中。
- 在 Identity Server 管理主控台「Portal Server 配置」中的「Rewriter 服務」中編輯 default_gateway_ruleset。
- 從終端機視窗重新啟動「閘道」:
gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start
進行改寫前的 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.htm l">
// 改寫此 URL 是因為已在 default_gateway_rulesetdefault_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。上述名稱與規則中指定的表單名稱與欄位名稱匹配。規則指出 valuePatterns 為 0|1234|,其符合此陳述式中的 value。因此會改寫出現在 valuePattern 之後的 URL。將前置 Portal Server URL 與閘道 URL。有關 valuePatterns 的詳細資料,請參閱「在規則中使用式樣匹配」
(第 116 頁)。<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.htm l"><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 範例
若要使用 Applet 範例
- 請取得 Applet 類別檔案。RewriteURLinApplet.class 檔案位於下列位置:
portal-server-URL/rewriter/HTML/applet/appletcode
出現 Applet 代碼之網頁的基準 URL 為:
portal-server-URL/rewriter/HTML/applet/rule1.html
- 將此範例中指定的規則新增至「改寫 HTML 屬性的規則」部分的 default_gateway_ruleset 中。
- 在 Identity Server 管理主控台「Portal Server 配置」中的「Rewriter 服務」中編輯 default_gateway_ruleset。
- 重新啟動「閘道」:
gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start
進行改寫前的 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/appl etcode=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 變數的範例
若要使用 JavaScript URL 變數範例
- 您可自下列路徑存取此範例:
portal-server-URL/rewriter/JavaScript/variables/url/js_urls.html
- 請確定您已於「閘道」服務的「網域與子網域的代理伺服器」清單中定義 abc.sesta.com。
若未定義,則會採用直接連接,且不前置閘道 URL。
- 將此範例中指定的規則新增至「改寫 JavaScript 來源的規則」部分的 default_gateway_ruleset 中。
- 在 Identity Server 管理主控台「Portal Server 配置」中的「Rewriter 服務」中編輯 default_gateway_ruleset。
- 若您新增此規則,請重新啟動「閘道」:
gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start
進行改寫前的 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/variab les/url/tmp/tmp.jpg";
var imgsrc="gateway-URL/portal-server-URL/rewriter/JavaScript/variab les/tmp/tmp.jpg";
var imgsrc="gateway-URL/portal-server-URL/rewriter/JavaScript/tmp/tm p.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/variab les/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 變數範例
若要使用 JavaScript 表示式變數範例
- 您可自下列路徑存取此範例:
portal-server-URL/rewriter/JavaScript/variables/expr/expr.html
- 將此範例中指定的規則新增 (若尚不存在) 至「改寫 JavaScript 來源的規則」部分的 default_gateway_ruleset 中。
- 在 Identity Server 管理主控台「Portal Server 配置」中的「Rewriter 服務」中編輯 default_gateway_ruleset。
- 若您新增此規則,請重新啟動「閘道」:
gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start
進行改寫前的 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=笊XPRESSION?name="expvar"/>
進行改寫後的 HTML 網頁
<html>
<head>
<title>JavaScript EXPRESSION Variables Test Page</title>
</head>
<body>
<SCRIPT>
// Rewriter 會於此處附加包裝函數 psSRAPRewriter_convert_expression
</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 變數的範例
若要使用 JavaScript DHTML 變數範例
- 您可自下列路徑存取此範例:
portal-server-URL/rewriter/JavaScript/variables/dhtml/dhtml.html
- 請確定您已於「閘道」服務的「網域與子網域的代理伺服器」清單中定義 abc.sesta.com。若未定義,則會採用直接連接,且不前置閘道 URL。
- 將此範例中指定的規則新增 (若尚不存在) 至「改寫 JavaScript 來源的規則」部分的 default_gateway_ruleset 中。在 Identity Server 管理主控台「Portal Server 配置」中的「Rewriter 服務」中編輯 default_gateway_ruleset。
- 若您新增此規則,請重新啟動「閘道」:
gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start
進行改寫前的 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/te st.html>"
// JavaScript DHTML 規則會將 dhtmlVar 的右側識別為動態 HTML 內容。因此會套用 default_gateway_ruleset 檔案中的 HTML 規則。動態 HTML 包含 href 屬性。default_gateway_ruleset 定義規則 <Attribute name="href"/>。因此會改寫 href 屬性的值。但此 URL 並不是絕對 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 變數的範例
若要使用 JavaScript DJS 變數範例
- 您可自下列路徑存取此範例:
portal-server-URL/rewriter/JavaScript/variables/djs/djs.html
- 請確定您已於「閘道」服務的「網域與子網域的代理伺服器」清單中定義 abc.sesta.com。若未定義,則會採用直接連接,且不前置閘道 URL。
- 將此範例中指定的兩個規則新增 (若尚不存在) 至「改寫 JavaScript 來源的規則」部分的 default_gateway_ruleset 中。在 Identity Server 管理主控台「Portal Server 配置」中的「Rewriter 服務」中編輯 default_gateway_ruleset。
- 重新啟動「閘道」:
portal-server-install-root/SUNWps/bin/gateway -n gateway-profile-name start
進行改寫前的 HTML 網頁
<html>
<head>
<title>Dynamic JavaScript Variable Test Page</title>
</head>
<body>
<script LANGUAGE="Javascript">
<!--
var dJSVar="var dJSimgsrc='/tmp/tmp/jpg';"
var dJSVar="var dJSimgsrc='../../../tmp/tmp/jpg';"
var dJSVar="var dJSimgsrc='http://abc.sesta.com/tmp/tmp/jpg';"
//-->
</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='gateway-URL/portal-server-URL/tmp/tmp/jpg';"
var dJSVar="var dJSimgsrc='gateway-URL/portal-server-URL/rewriter/tmp/tmp/jpg';"
var dJSVar="var dJSimgsrc='gateway-URL/http://abc.sesta.com/tmp/tmp/jpg';"
// 所有上述陳述式皆會使用閘道及 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 變數的範例
若要使用 JavaScript SYSTEM 變數範例
- 您可自下列路徑存取此範例:
portal-server-URL/rewriter/JavaScript/variables/system/system.html
- 將此範例中指定的規則新增 (若尚不存在) 至「改寫 JavaScript 來源的規則」部分的 default_gateway_ruleset 中。
- 在 Identity Server 管理主控台「Portal Server 配置」中的「Rewriter 服務」中編輯 default_gateway_ruleset。
- 重新啟動「閘道」:
gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start
進行改寫前的 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 it is 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 it is loaded.
</body>
</html>
JavaScript URL 函數的範例
若要使用 JavaScript URL 函數範例
- 您可自下列路徑存取此範例:
portal-server-URL/rewriter/JavaScript/functions/url/url.html
- 將此範例中指定的規則新增 (若尚不存在) 至「改寫 JavaScript 來源的規則」部分的 default_gateway_ruleset 中。在 Identity Server 管理主控台「Portal Server 配置」中的「Rewriter 服務」中編輯 default_gateway_ruleset。
- 重新啟動「閘道」:
gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start
進行改寫前的 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,hei ght=500);
//-->
</SCRIPT>
</body>
</html>
JavaScript EXPRESSION 函數的範例
若要使用 JavaScript EXPRESSION 函數範例
- 您可自下列路徑存取此範例:
portal-server-URL/rewriter/JavaScript/functions/expr/expr.html
- 將此範例中指定的規則新增 (若尚不存在) 至「改寫 JavaScript 來源的規則」部分的 default_gateway_ruleset 中。
- 在 Identity Server 管理主控台「Portal Server 配置」中的「Rewriter 服務」中編輯 default_gateway_ruleset。
- 重新啟動「閘道」:
gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start
進行改寫前的 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"+jste st2()));
// 此規則指出函數 (EXPRESSION 類型) jstest1 中的第一個參數需要改寫。此表示式的值為 /test/images/test.html。此值會被前置 Portal Server 與閘道 URL。
document.write("<a HREF="+test1+">Test</a>");
alert(test1);
//-->
</SCRIPT>
</body>
</html>
JavaScript DHTML 函數的範例
若要使用 JavaScript DHTML 函數範例
- 您可自下列路徑存取此範例:
portal-server-URL/rewriter/JavaScript/functions/dhtml/dhtml.html
- 將此範例中指定的規則新增 (若尚不存在) 至「改寫 JavaScript 來源的規則」部分的 default_gateway_ruleset 中。
- 在 Identity Server 管理主控台「Portal Server 配置」中的「Rewriter 服務」中編輯 default_gateway_ruleset。
- 重新啟動「閘道」:
gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start
進行改寫前的 HTML 網頁
<html>
<head>
Testing JavaScript DHTML Functions
<br>
<br>
<script>
<!--
document.write('<a href="/index.html">write</a><BR>')
document.writeln('<a href="index.html">writeln</a><BR>')
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('<a href="gateway-URL/portal-server-URL/index.html">write</a><BR>')
// 第一個規則指出 DHTML JavaScript 函數 document.write 的第一個參數需要改寫。Rewriter 會將第一個參數識別為一個簡單的 HTML 陳述式。在 default_gateway_ruleset 中的 HTML 規則部分具有規則 <Attribute name="href" />,此規則指出此陳述式需改寫。
document.writeln('<a href="gateway-URL/portal-server-URL/rewriter/JavaScript/function s/dhtml/index.html">writeln</a><BR>')
// 第二個規則指出 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.write 與 document.writeln,但上述陳述式並未改寫。這是因為這個情況下的第一個參數並非簡單 HTML。其可能是任何字串而 Rewriter 不知如何將之改寫。
//-->
</SCRIPT>
</head>
<body BGCOLOR=white>
<br><br>
Testing document.write and document.writeln
</body>
</html>
JavaScript DJS 函數的範例
若要使用 JavaScript DJS 函數範例
- 您可自下列路徑存取此範例:
portal-server-URL/rewriter/JavaScript/functions/djs/djs.html
- 請確定您已於「閘道」服務的「網域與子網域的代理伺服器」清單中定義 abc.sesta.com。
若未定義,則會採用直接連接,且不前置閘道 URL。
- 將此範例中指定的規則新增 (若尚不存在) 至「改寫 JavaScript 來源的規則」部分的 default_gateway_ruleset 中。在 Identity Server 管理主控台「Portal Server 配置」中的「Rewriter 服務」中編輯 default_gateway_ruleset。
- 重新啟動「閘道」:
portal-server-install-root/SUNWps/bin/gateway -n gateway-profile-name start
進行改寫前的 HTML 網頁
<html>
Test for JavaScript DJS Functions
<br>
<script>
menu.addItem(new NavBarMenuItem("All Available
Information","JavaScript:top.location='http://abc.sesta.com'"));
//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='gateway-URL/http://abc.se sta.com'"));
// 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 屬性範例
若要使用 XML 屬性範例
進行改寫前的 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.htm l"/></xml>
// 改寫此陳述式是因為其符合規則中所指定的條件。attribute name 是 href,tag 是 check,valuePatterns 則是 1234。在 valuePatterns 後面的字串會被改寫。有關 valuePatterns 的詳細資料,請參閱「在規則中使用式樣匹配」(第 116 頁)。
</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 &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>
說明
表 3-3 顯示範例規則集與案例研究之間的對應關係。第一欄列出網頁內容;第二欄列出所套用的規則;第三欄顯示 Rewriter 輸出結果;第四欄說明套用規則的方式。
Outlook Web Access 的規則集
Secure Remote Access 支援位於 Sun ONE web server 及 IBM 應用程式伺服器上的 Outlook Web Access 2000 sp3。
若要配置 OWA 規則集
6.x 與 3.0 規則集對映下表列出 Sun ONE Portal Server, Secure Remote Access Rewriter 規則與前版 Sun ONE Portal Server 的對映關係。