Secure Remote Access 的 Rewriter 元件可讓使用者透過剖析網頁,經由閘道來存取企業內部網路的網頁。
本章涵蓋下列主題:
Secure Remote Access 的 Rewriter 元件能讓一般使用者利用修改網頁上的統一資源識別碼 (Uniform Resource Identifier, URI) 參照,以指向閘道從而瀏覽企業內部網路。URI 可定義於任何已註冊名稱空間內封裝名稱的方法,並以該名稱空間為其加標記。最常見的 URI 類別為單一資源定址器 (Uniform Resource Locator, URL)。Rewriter 僅支援 HTTP 或 HTTPS。不論協定的大小寫為何都支援。Rewriter 僅支援相對 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 來順利存取網頁。URLScraper 與閘道會使用 Rewriter。
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:
<?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 記錄檔中。如需此記錄檔的資訊,請參閱除錯檔案名稱。
本節包含一範例規則集。我們使用第 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>
撰寫規則的一般程序如下:
識別出含有需重新寫入內容之 HTML 網頁的目錄。
在這些目錄中,識別出需要重新寫入的網頁。
識別出各網頁上需重新寫入的 URL。識別出多數 URL 的簡易方法就是搜尋 "http" 與 "/"。
識別出 URL 的內容類型:HTML、JavaScript 或 XML。
在 Access Manager 管理主控台「Portal Server 配置」下的「Rewriter 服務」中編輯需要的規則集,以撰寫重新寫入各個 URL 所需的規則。
將所有規則合併到該網域的規則集中。
建立規則集時,請記住:
特定主機的優先順序是根據最長的 URI 符合。以下列的規則集為例
mail1.central.abc.com|iplanet_mail_ruleset *.sfbay.abc.com|sfbay_ruleset *.abc.com|generic_ruleset
使用的會是 sfbay_ruleset,因為它的符合內容最長。
規則集中的規則會依順序套用至網頁中的所有陳述式,直到有一個規則與特定陳述式相符。
撰寫規則時,請牢記規則的順序。規則會以出現在規則集中的順序,套用至網頁中的陳述式。若您有特定規則,及包含 "*" 的一般規則,請先定義該特定規則,然後再定義一般規則。否則,在套用特定規則之前就會先套用一般規則至所有陳述式。
所有的規則都必須包含在 <RuleSet> </RuleSet> 標記內。
將所有需重新寫入 HTML 內容的規則納入規則集的 <HTMLRules> </HTMLRules> 區段。
將所有需重新寫入 JavaScript 內容的規則納入規則集的 <JSRules> </JSRules> 區段。
將所有需重新寫入 XML 內容的規則納入規則集的 <XMLRules> </XMLRules> 區段。
請在您的企業內部網路網頁中,識別出需重新寫入的 URL,然後將所需規則納入規則集的相應區段 (HTML、JSRules 或 XMLRules)。
將規則集指派至所需網域。
重新啟動閘道以使變更產生作用:
gateway-install-root/SUNWportal/bin/gateway -n gateway-profile-name start
規則集根元素具有兩種屬性:
RuleSetName,例如,default_ruleset。會在 RuleSet 至 URI 的對映中參照此名稱。
Extends。此屬性指的是規則集的繼承特性。值會指向您欲從中導出規則集的規則集。
使用值 none 以表示此新的獨立規則集不依附於任何其他的規則集,或指定 RuleSetName 以表示您的規則集依附於其他規則集。
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
JavaScript
XML
可進一步將網頁上的 HTML 內容分類為屬性、表單或 Applet。同樣地,HTML 內容的規則可分類為:
此規則可識別需重新寫入值的標籤屬性。屬性值可為簡單的 URL、JavaScript 或 DHTML 內容。例如:
「img」標籤中指向某個影像位置的 src 屬性 (簡單 URL)
href 屬性中處理按一下連結時的動作的 onClick 屬性 (DJS)
此部分說明下列內容:
<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。
假設此網頁的基準 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 網頁可能包含表單。某些表單元素可能會將 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 後面的所有內容。請參閱在規則中與式樣相符。
單一網頁可以包含許多 Applet,而每個 Applet 則可以包含許多參數。Rewriter 會利用 Applet 的 HTML 定義與規則中指定的值相符,然後修改作為 Applet 參數定義一部分呈現的 URL 值。此取代動作會在伺服器上進行,而非在使用者瀏覽特定網頁時進行。此規則可識別並重新寫入 HTML 內容中的 Applet 及物件標籤的參數。
本節分為下列部分:
<Applet code="ApplicationClassName/ObjectID " param="parametername" [valuePatterns="" source="*"] />
其中
code 是 Applet 或物件類別的名稱 (必須的)
param 是值需要重新寫入的參數的名稱 (必須的)
valuePatterns 請參閱在規則中與式樣相符。
source 是包含 Applet 定義的網頁的 URL (可選,預設為 *,表示在任何網頁中)
假設此網頁的基準 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 之後的內容 (可選,預設為 "",表示需重新寫入完整值)
您可以透過以反斜線退出特殊化字元的方式來指定它們。例如:
<Form source="*/source.html " name="form1" field=" visit" [valuePatterns="0|1234| \\;original text|changed text"]/>
您可使用萬用字元星號 (*) 字元來完成用於重新寫入的式樣相符。
在 valuePatterns 欄位中,您不能僅指定一個 *。因為 * 表示包含所有文字的符合結果,這樣 valuePattern 後沒有文字。因此,Rewriter 沒有可重新寫入的文字。您必須利用其他字串與 * 連用,如 *abc。在這種情況下,即會重新寫入所有位於 *abc 之後的內容。
規則中的任何欄位皆可使用萬用字元星號 (*)。但是規則中所有的欄位不能都包含 *。若所有欄位皆包含 *,則會忽略此規則。不會顯示任何的錯誤訊息。
您可以利用 * 或 ** 與顯示在原始陳述式中的分隔字元 (分號或逗號) 連用,以分隔多個欄位。一個星號 (*) 會與所有不需重新寫入的欄位相符,而兩個星號 (**) 則會與所有需重新寫入的欄位相符。
在 valuePatterns 中使用萬用字元列出 * 萬用字元的某些用法範例。
表 4–1 * 萬用字元的使用範例
URL |
valuePatterns |
描述 |
---|---|---|
url1, url2, url3, url4 |
valuePatterns = "**, *, **, *" |
會重新寫入 url1 與 url3,因為 ** 會指出待重新寫入的部分 |
XYZABChttp://host1.sesta.com/dir1.html |
valuePatterns = "*ABC" |
僅會重新寫入 http://host1.sesta.com/dir1.html 部分。所有位於 *ABC 之後的項目皆需重新寫入。 |
"0|dir1|dir2|dir3|dir4|test|url1 |
valuePatterns = "*|*|**|*|**|*|" |
會重新寫入 dir2、dir4 與 url1。需重新寫入的最後一個欄位不必以 ** 表示。 |
JavaScript 可在多個位置包含 URL。Rewriter 無法直接剖析 JavaScript 與確定 URL 部分。必須撰寫特定規則集以協助 JavaScript 處理器識別及轉譯 URL。
具有 URL 類型的 JavaScript 元素分類如下:
<Variable name="variableName" [type="URL|EXPRESSION|DHTML|DJS|SYSTEM" source="*"]>
視其所持有的值類型而定,JavaScript 變數可細分為 5 種:
變數值是一個可視為 URL 的簡單字串。
本節分為下列部分:
<Variable name="variableName" type="URL" [source="*"]>
其中
variableName 為變數名稱。將會重新寫入 variableName 的值 (必須的)
type 為 URL 變數 (必須的,且值必須為 URL)
source 是此 JavaScript 變數所在的網頁的 URI (可選,預設為 *,表示在任何網頁中)
假設基準 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 變數的右側會有一個表示式。此表示式會產生一個 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 (可選,預設為 *,表示任何來源)
假設此網頁的基準 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。
這些是含有 HTML 內容的 JavaScript 變數。
本節分為下列部分:
<Variable name="variableName" type="DHTML" [source="*"]/>
其中
variableName 是含有 DHTML 內容的 JavaScript 變數的名稱 (必須的)
type 是變數的類型 (必須的,此值必須為 DHTML)
source 是網頁的 URL (可選,預設為 *,表示在任何網頁中)
假設此網頁的基準 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 會被重新寫入。
這些是含有 JavaScript 內容的 JavaScript 變數。
本節分為下列部分:
<Variable name="variableName" type="DJS" [source="*"]/>
其中
variable 是 JavaScript 變數,其值為 javascript。
假設此網頁的基準 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 變數的值。
這些變數並非由使用者公佈且支援有限。這些變數可用作 JavaScript 標準的一部分。例如,window.location.pathname。
本節分為下列部分:
<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 (可選,預設為 *,表示在任何網頁中)
假設此網頁的基準 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。
本節分為下列部分:
<Function name="functionName" paramPatterns="y,," type="URL" [source="*"]/>
其中
name 是含有 URL 類型參數的函數名稱 (必須的)
paramPatterns 指出需重新寫入的參數 (必須的)
y y 的位置會指出需重新寫入的參數。例如,在此語法中,需要重新寫入第一個參數,但第二個參數則不應重新寫入
type 是函數的類型 (必須的,此值必須為 URL)
source 是具有此函數呼叫之網頁的 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。
這些參數採用表示式值,即 URL 中的計算結果。
本節分為下列部分:
<Function name="functionName" paramPatterns="y" [type="EXPRESSION" source="*"]/>
其中
name 為函數名稱 (必須的)
paramPatterns 指出需重新寫入的參數 (必須的)
y y 的位置會指出需重新寫入的函數參數。上列語法中,僅會重新寫入第一個參數
type 指定 EXPRESSION 值 (可選)
source 是呼叫此函數的網頁的 URI
假設此網頁的基準 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 的函數規則負責執行重新寫入。
其值為 HTML 的函數參數
本機 JavaScript 方法,如會以動態的方式產生 HTML 網頁的 document.write(),歸屬於此種類。
本節分為下列部分:
<Function name="functionName" paramPatterns="y" type="DHTML" [source="*"]/>
其中
name 是函數名稱
paramPatterns 指出需重新寫入的參數 (必須的)
y y 的位置會指出需重新寫入的函數參數。上列語法中,僅會重新寫入第一個參數
假設此網頁的基準 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 屬性規則,以實際重新寫入識別出的參數。
其值為 JavaScript 的函數參數。
本節分為下列部分:
<Function name="functionName" paramPatterns="y" type="DJS" [source="*"]/>
其中
name 是含有一個 DJS 參數的函數名稱 (必須的)
paramPatterns 指出上列函數中哪一個參數是 DJS (必須的)
y y 的位置會指出需重新寫入的函數參數。上列語法中,僅會重新寫入第一個參數
type 是 DJS (必須的)
source 是網頁的 URI (可選,預設為 *,表示任何 URI)
假設此網頁的基準 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 內容,其因此可包含 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>
描述
上列範例中,僅重新寫入第四行,因為其符合規則中所指定的所有條件。請參閱在規則中與式樣相符。
HTML 網頁中的 Cascading Style Sheet (包含 CCS2) 會被轉譯。沒有任何針對此轉譯而定義的規則,因為 URL 僅出現在 CSS 的 url() 函數與匯入語法中。
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 無法復原的錯誤。
警告 – 不會對 Rewriter 的運作造成重大影響的警告。Rewriter 可從此類型的錯誤中復原,但可能會或不會造成不當行為。有些出現在警告中的訊息僅是告知性的。例如「Not rewriting image content」(未重新寫入影像內容) 被記錄為警告訊息。這個情況並不會造成重大影響,因為 Rewriter 並不會用於重新寫入影像。
訊息 – 這是 Rewriter 所提供最高層級的資訊。
以超級使用者身份登入閘道機器,然後編輯下列檔案:
gateway-install-root/SUNWam/config/AMConfig-instance-name.properties |
設定除錯層級:
com.iplanet.services.debug.level= |
除錯層級為:
error - 只會在除錯檔案中記錄嚴重錯誤。在此種錯誤發生時,Rewriter 通常會停止運作。
warning - 會記錄警告訊息。
message - 會記錄所有的除錯訊息。
off - 不會記錄任何除錯訊息。
在 AMConfig-instance-name .properties 檔案的下列特性中,指定除錯檔案目錄:
com.iplanet.services.debug.directory=/var/opt/SUNWam/debug |
其中 /var/opt/SUNWam/debug 是預設的除錯目錄。
從終端機視窗重新啟動閘道:
./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 會產生一個用於未留存於上述檔案中的其他除錯訊息的檔案。檔案名稱包括兩個部分:第一部分為 pwRewriter 或 psSRARewriter,第二部分則為使用 portal 或 gateway-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
本節包括:
含需重新寫入之內容的簡單 HTML
重新寫入內容所需的規則
已重新寫入的相應 HTML 網頁
這些頁面範例位於 portal-server-URL /rewriter 目錄下。您可在套用規則前瀏覽整個頁面,然後經由您的閘道檢視含已重新寫入之輸出的檔案,以查看規則的套用結果。在某些範例中,規則已經是 default_gateway_ruleset 的一部分。在某些範例中,您必須將規則納入 default_gateway_ruleset 中。這一點會在適當之處提及。
某些以粗體顯示的陳述式表示其已被重新寫入。
可用的範例如下:
HTML
JavaScript
函數
XML
XML 屬性範例
您可自下列路徑存取此範例:
portal-server-URL /rewriter/HTML/attrib/attribute.html
請確定您已於閘道服務的 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com 與 host1.siroe.com 。
若未定義,則會採用直接連接,且不前置閘道 URL。
您不需將此範例中指定的規則新增至 default_gateway_ruleset 中,因為規則已完成定義。
<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> 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 記號範例
您可自下列路徑存取此範例:
portal-server-URL /rewriter/HTML/jstokens/JStokens.html
將此範例中指定的規則新增至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。
在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset。
從終端機視窗重新啟動閘道:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<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> <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。這是因為 onAbort、onBlur、onFocus、onChange 與 onClick 的規則都已在 default_gateway_ruleset 檔案中定義。Rewriter 會偵測 JavaScript 記號,並將之傳送至 JavaScript 函數規則中以便進行進一步的處理。此範例中的第二個規則會告知 Rewriter 該重新寫入哪一個參數。
</body> <br>
Rewriting ends
</html>
您可自下列路徑存取表單範例:
portal-server-URL/rewriter/HTML/forms/formrule.html
請確定您已於閘道服務的 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com。
若未定義,則會採用直接連接,且不前置閘道 URL。
將此範例中指定的規則新增至 [重新寫入 HTML 屬性的規則] 部分的 default_gateway_ruleset 中。
在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset。
從終端機視窗重新啟動閘道:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<!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> <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。上述名稱與規則中指定的表單名稱與欄位名稱相符。規則指出 valuePatterns 為 0|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>
請取得 Applet 類別檔案。RewriteURLinApplet.class 檔案位於下列位置:
portal-server-URL/rewriter/HTML/applet/appletcode
出現 Applet 代碼之網頁的基準 URL 為:
portal-server-URL/rewriter/HTML/applet/rule1.html
將此範例中指定的規則新增至 [重新寫入 HTML 屬性的規則] 部分的 default_gateway_ruleset 中。
在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset。
重新啟動閘道:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<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> 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>
您可自下列路徑存取此範例:
portal-server-URL /rewriter/JavaScript/variables/url/js_urls.html
請確定您已於閘道服務的 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com。
若未定義,則會採用直接連接,且不前置閘道 URL。
將此範例中指定的規則新增至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。
在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset。
若您新增此規則,請重新啟動閘道:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<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> 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>
您可自下列路徑存取此範例:
portal-server-URL /rewriter/JavaScript/variables/expr/expr.html
將此範例中指定的規則新增 (若尚不存在) 至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。
在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset。
若您新增此規則,請重新啟動閘道:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<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> <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>
您可自下列路徑存取此範例:
portal-server-URL /rewriter/JavaScript/variables/dhtml/dhtml.html
請確定您已於閘道服務的 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com。若未定義,則會採用直接連接,且不前置閘道 URL。
將此範例中指定的規則新增 (若尚不存在) 至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset。
若您新增此規則,請重新啟動閘道:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<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> <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>
您可自下列路徑存取此範例:
portal-server-URL /rewriter/JavaScript/variables/djs/djs.html
請確定您已於閘道服務的 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com。若未定義,則會採用直接連接,且不前置閘道 URL。
將此範例中指定的兩個規則新增 (若尚不存在) 至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset。
重新啟動閘道:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<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> <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>
您可自下列路徑存取此範例:
portal-server-URL /rewriter/JavaScript/variables/system/system.html
將此範例中指定的規則新增 (若尚不存在) 至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。
在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset。
重新啟動閘道:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<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> <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>
您可自下列路徑存取此範例:
portal-server-URL /rewriter/JavaScript/functions/url/url.html
將此範例中指定的規則新增 (若尚不存在) 至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset。
重新啟動閘道:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<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> <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>
您可自下列路徑存取此範例:
<portal-install-location>/SUNWportal/samples/rewriter
將此範例中指定的規則新增 (若尚不存在) 至重新寫入 JavaScript 來源的規則部分的 default_gateway_ruleset 中。
使用 Portal Server 管理主控台中的 Rewriter 服務來編輯 default_gateway_ruleset。
重新啟動閘道:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<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> <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>
您可自下列路徑存取此範例:
portal-server-URL /rewriter/JavaScript/functions/dhtml/dhtml.html
將此範例中指定的規則新增 (若尚不存在) 至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。
在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset。
重新啟動閘道:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<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> <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.write 與 document.writeln,但上述陳述式並未重新寫入。這是因為這個情況下的第一個參數並非簡單 HTML。其可能是任何字串而 Rewriter 不知如何將之重新寫入。
//--> </SCRIPT> </head> <body BGCOLOR=white> <br><br> Testing document.write and document.writeln </body> </html>
您可自下列路徑存取此範例:
portal-server-URL /rewriter/JavaScript/functions/djs/djs.html
請確定您已於閘道服務的 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com。
若未定義,則會採用直接連接,且不前置閘道 URL。
將此範例中指定的規則新增 (若尚不存在) 至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset。
重新啟動閘道:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<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> 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>
您可自下列路徑存取此範例:
portal-server-URL /rewriter/XML/attrib.html
將此範例中指定的規則新增 (若尚不存在) 至 [重新寫入 XML 來源的規則] 部分的 default_gateway_ruleset 中。
在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset。
重新啟動閘道:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<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> 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 name 是 href,tag 是 check 而 valuePatterns 是 1234。valuePatterns 之後所接的字串會被重新寫入。請參閱在規則中與式樣相符以取得 valuePatterns 的詳細資訊。
</body> Rewriting ends </html>
本節包括某範例郵件用戶端的來源 HTML 網頁。此案例研究並未囊括所有可能的情況與規則。這只是一個範例規則集,用以幫助您為自己的企業內部網路網頁收集規則。
針對此案例研究訂出下列假設狀態:
郵件用戶端的基準 URL 假設為 abc.siroe.com
閘道 URL 假設為 gateway.sesta.com
位於閘道服務的 [網域與子網域的代理伺服器] 清單中的相關項目
<!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>
描述顯示範例規則集與案例研究之間的對應關係。
表 4–3 範例規則集與案例研究之間的對映
套用規則集的優先順序為 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 中的頁面。
按一下 [儲存] 完成作業。
從終端機視窗重新啟動閘道:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
Secure Remote Access 伺服器支援 Sun Java System Web Server 和 IBM 應用程式伺服器上 Outlook Web Access (OWA) 的 MS Exchange 2000 SP3 以及 MS Exchange 2003 安裝。
以管理員身份登入 Portal Server 管理主控台。
選取 [Secure Remote Access] 標籤,並選取要設定屬性的閘道設定檔。
在 [對映 URI 至規則集] 欄位中,輸入安裝 Exchange 2000 的服務其名稱,隨後輸入 Exchange 2000 Service Pack 4 OWA 規則集。
例如:
exchange.domain.com|exchange_2000sp3_owa_ruleset. |
在 Exchange 端,「公用資料夾」被配置為使用 NTLM 授權。必須將它變更為使用 HTTP Basic Authorization。
要執行此作業,請至 Exchange 伺服器,選取 [控制台] -->[系統管理工具],然後開啟 [網際網路資訊服務]。
在 [預設網站] 下,有一個名為 [公用] 的「公用資料夾」標籤。按一下滑鼠右鍵,然後選取 [內容]。按一下 [目錄安全性] 標籤。在 [匿名存取及認證] 控制台上,選取 [編輯...]。消取選取所有其他選項,僅勾選 [Basic Authentication]。
下表列出 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 程序檔 |