![]() | |
Sun Java System Portal Server Secure Remote Access 6 2005Q1 管理指南 |
第 3 章
Proxylet 和 Rewriter本章描述 Proxylet 和 Rewriter。這些元件能夠讓使用者透過 [閘道] 存取內部內部網路的網頁。存取內部網路網頁的方法各有不同。Proxylet 並不會剖析網頁。而 Rewriter 則會。
涵蓋下列有關 Proxylet 的主題:
涵蓋下列有關 Rewriter 的主題:
Proxylet 摘要Proxylet 是將自身設定為用戶端機器上代理伺服器的 Java applet。Proxylet 會讀取並修改用戶端機器上自動代理伺服器配置 (PAC) 檔案中的代理伺服器設定,將代理伺服器設定指向本地的代理伺服器或 Proxylet。
Proxylet 從閘道繼承傳輸模式。如果已經將閘道配置為在 SSL 上執行,Proxylet 會在用戶端機器與閘道或目標伺服器之間建立一個安全的通道。為了加密目的,如果用戶端 JVM 為 1.4 或更新版本,或者如果必要的 jar 檔是位於用戶端機器中,Proxylet 會使用 JSSE API 進行加密。否則它會使用 KSSL API。解密會在用戶端機器上執行。
被導向至閘道的 URL 的網域和子網域已在閘道設定檔中指定。如果 URL 並不是閘道處理的部份網域,則請求會導向至網際網路。
如果在閘道啟用個人數位憑證 (PDC),Proxylet 會支援用戶端認證。若要檢查是否啟用 PDC,請參閱取得用戶端資訊。
Proxylet 是透過指定用戶端 IP 位址或代理伺服器主機名稱以及指定連接埠的 Access Manager 管理主控台啟用的。如果已啟用 Proxylet,它會針對用戶端機器進行下列檢查:
如果符合需求,則會下載小型的 applet 並且在用戶端機器上啟動。如果用戶端沒有 JRE 1.3.1 或更高版本,當您具有網際網路連線及管理權限時,用戶端就會透過 Proxylet 自動下載 JRE。
使用 Proxylet 時,它會從「自動代理伺服器配置 (PAC)」檔案中擷取代理伺服器設定。
使用 Proxylet 的優點
不同於 Rewriter,Proxylet 安裝後很少需要或不需要變更。與協力廠商軟體 (例如 Microsoft Exchange Server) 的整合也非常容易。由於 Proxylet 不會接觸網路內容,閘道的效能也有所增加。因為 Proxylet 不會修改內容或變更資料,使用者可以下載任何類型的內容,例如 tar 與 gzip 檔案。
配置 Proxylet
如需有關啟用與配置 Proxylet 的資訊,請參閱第 12 章「配置 Proxylet」。
備註
如果使用者沒有用來執行 Proxylet 的適當 Java Virtual Machine (JVM),請用瀏覽器連線至 sun.com 站台下載 Java Runtime Environment。如果使用者的瀏覽器設定並未包含正確的值,或如果使用者在使用直接代理伺服器而未存取至網際網路,則無法下載 Proxylet。
HTTPS 支援
Proxylet 支援 HTTPS,可完成以下作業:
Rewriter 摘要SRA 的 Rewriter 元件能讓一般使用者利用修改網頁上的單一資源指示碼 (Uniform Resource Identifier,URI) 參照,以指向 [閘道] 從而瀏覽內部網路。URI 可定義於任何已註冊名稱空間內封裝名稱的方法,並以該名稱空間為其加標記。最常見的 URI 種類為單一資源定址器 (URL)。Rewriter 僅支援 HTTP 或 HTTPS,儘管通訊協定大寫,這項支援依然存在。Rewriter 僅支援相對 URL 中包含反斜線符號。
例如,
http://abc.sesta.com\index.html 會被改寫,
下列 URL 不會被改寫:
http:\\abc.sesta.com
http:/abc.com
字元集編碼HTTP 標準需要 HTTP 標頭或 HTML 中繼標記為網頁指定字元集。但是有時候此資訊沒有辦法使用。字元集必須為已知,如此資料編碼的設定以及資料的顯示才會依照建立的想法進行。
Sun Microsystems 會提供協力廠商的產品以偵測字元集。若要啟用此產品,請從 Java Enterprise System Accessory CD 安裝 SUNWjchdt 套裝軟體。如果產品已經安裝,Rewriter 將會偵測到此產品並在需要時使用。
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 提供者的詳細資訊,請參閱「Portal Server 管理指南」。
Gateway
閘道會從網際網路入口網站取得內容,並在將內容傳送至瀏覽器之前,將閘道 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 配置] 子區段定義規則集。
有關定義規則集的詳細資訊,請參閱「Portal Server 管理指南」。建立新規則集後,您必須定義所需規則。
本節包含以下主題:
公開介面 (規則集 DTD)
以下為規則集 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 範例
本節包含一範例規則集。案例研究用來說明 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
定義規則集根元素
規則集根元素具有兩種屬性:
使用遞迴功能
Rewriter 使用遞迴功能在符合的字串式樣的結尾搜尋是否有相同的式樣。
例如,當 Rewriter 剖析下列字串時:
<a href="src=abc.jpg,src=bcd.jpg,src=xyz.jpg">
規則
<Attribute name="href" valuePatterns="*src=**"/>
僅會重寫第一個出現的式樣,看起來會像這個樣子:
<a href="src=http://jane.sun.com/abc.jpg">
但是如果您使用如下的遞迴選項,
<Attribute name="href" valuePatterns="REC:*src=**"/>;
Rewriter 在符合的字串式樣的結尾搜尋是否有相同的式樣,因此輸出將會是:
<a href="src=http://jane.sun.com/abc.jpg,src=http://jane.sun.com/bcd.jpg,src=http://jane.sun.com/xyz.jpg">
定義以語言為基礎的規則 (定義規則)規則以下列語言為基礎:
用於 HTML 內容的規則
可進一步將網頁上的 HTML 內容分類為屬性、表單或 Applet。同樣地,HTML 內容的規則可分類為:
HTML 內容的屬性規則
此規則可識別需改寫值的標籤屬性。屬性值可為簡單的 URL、JavaScript 或 DHTML 內容。例如:
本節分為下列部分:
屬性規則語法
<Attribute name="attributeName" [tag="*" valuePatterns="" source="*" type="URL|DHTML|DJS"]/>
其中,
attributeName 為屬性名稱 (必須的)
tag 是屬性所屬的標籤 (可選、預設 * 表示任何標籤)
valuePatterns 請參閱在規則中使用式樣匹配。
source 指出定義此屬性的頁面的 URI (可選、預設 * 表示在任何網頁中)
type 指出值的類型 (可選)。類型可能是:
屬性規則範例
假設此網頁的基準 URL 是:
http://mymachine.intranet.com/mypage.html
網頁內容
<a href="http://mymachine.intranet.com/mypage.html">
規則
<Attribute name="href" />
或者
<Attribute name="href" tag="a"/>
輸出
<a href=gateway-URL/http://mymachine.intranet.com/myhome.html>
描述
因為待改寫的 URL 已經是一個絕對 URL,因此只會將閘道 URL 前置於此 URL。
DJS 屬性範例
假設此網頁的基準 URL 是:
http://abc.sesta.com/focus.html
網頁內容
<Form>
<input TYPE=TEXT SIZE=20 value=focus onClick="Check('/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/appletcode" 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 之後的內容 (可選、預設「」表示需改寫完整值)。
以 valuePatterns 格式指定特殊化字元
您可以透過以反斜線退出特殊化字元的方式來指定它們。例如:
<Form source="*/source.html" name="form1" field="visit" [valuePatterns="0|1234|\;original text|changed text"]/>
在 valuePatterns 中使用萬用字元
您可使用 * 字元來完成用於改寫的式樣匹配。
在 valuePatterns 欄位中,您不能僅指定一個 *。因為 * 表示與所有項目匹配,valuePattern 後將不會有任何項目,因此 Rewriter 也就沒有可改寫的項目。您可利用其他字串與 * 連用,如 *abc。在這種情況下,即會改寫所有位於 *abc 之後的內容。
您可以利用 * 或 ** 與顯示在原始陳述式中的分隔字元 (分號或逗號) 連用,以分隔多個欄位。一個萬用字元 (*) 會與不需改寫的所有欄位匹配,而兩個萬用字元 (**) 則會與需改寫的所有欄位匹配。
表 3-1 列出 * 萬用字元的部分範例使用方法。
用於 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 變數
EXPRESSION 變數的右側會有一個表示式。此表示式會產生一個 URL。Rewriter 會將 JavaScript 函數 (psSRAPRewriter_convert_expression) 附加至 HTML 網頁,因為其無法在伺服器上計算這類表示式的值。此函數會將表示式視為參數,並在用戶端瀏覽器中計算所需 URL 值。
若您不確定陳述式包含的是簡單 URL 或 EXPRESSION URL,請使用 EXPRESSION 規則,因為其可處理兩種情況。
本節分為下列部分:
EXPRESSION 變數語法
<Variable name="variableName" [type="EXPRESSION" source="*"]/>
其中
variableName 是 JavaScript 變數的名稱,其值為一表示式 (必須的)
type 是 JavaScript 變數的類型 (可選,預設值為 EXPRESSION)
source 是網頁的 URI (可選,預設為 * 表示任何來源)
EXPRESSION 變數範例
假設此網頁的基準 URL 是:
http://abc.siroe.com/dir1/dir2/page.html
網頁內容
<script LANGUAGE="Javascript">
<!--
//Expression variables
var expvar= getURIPreFix() + "../../images/graphics"+".gif";
document.write("<A HREF="+expvar+">Link to XYZ content</A><P>")
var expvar="../../images/graphics"+".gif";
//-->
</SCRIPT>
規則
<Variable name="expvar" type="EXPRESSION"/>
或者
<Variable name="expvar"/>
輸出
var expvar=psSRAPRewriter_convert_expression(getURIPreFix() + "../../images/graphics"+".gif");
document.write("<a href="+expvar+">>Link to XYZ content</A><P>")
var expvar="gateway-URL/http://abc.siroe.com/images/graphics"+".gif";
描述
psSRAPRewriter_convert_expression 函數會前置於第一行 EXPRESSION 變數 expvar 之前。此函數可處理表示式,並於執行時間改寫內容。在第三行中,此值將被改寫為簡單 URL。
DHTML (動態 HTML) 變數
這些是含有 HTML 內容的 JavaScript 變數。
本節分為下列部分:
DHTML 語法
<Variable name="variableName" type="DHTML" [source="*"]/>
其中
variableName 是含有 DHTML 內容的 JavaScript 變數的名稱 (必須的)
type 是變數的類型 (必須的,此值必須為 DHTML)
source 是網頁的 URL (可選,預設為 * 表示在任何網頁中)
DHTML 範例
假設此網頁的基準 URL 是:
http://abc.sesta.com/graphics/set1/graphics/jsscript/JSVAR/page.html
網頁內容
<script LANGUAGE="Javascript">
<!--
//DHTML Var
var dhtmlVar="<a href=../../images/test.html>"
var dhtmlVar="<a href=/images/test.html>"
var dhtmlVar="<a href=images/test.html>"
//-->
</SCRIPT>
規則
<Variable name="dhtmlVar" type="DHTML"/>
<Attribute name="href" />
或者
<Attribute name="href" tag="a"/>
輸出
<script LANGUAGE="Javascript">
<!--
//DHTML Var
var dhtmlVar="<a href=gateway-URL/http://abc.sesta.com/graphics/set1/graphics/images/test.html>"
var dhtmlVar="<a href=gateway-URL/http://abc.sesta.com/images/test.html>"
var dhtmlVar="<a href=gateway-URL/http://abc.sesta.com/graphics/set1/graphics/jscript/JSVAR/images/test.html>"
//-->
</SCRIPT>
描述
JavaScript 剖析器會讀取 dhtmlVar 的值,以作為 HTML 內容,並經由 HTML 剖析器傳送內容。HTML 剖析器會套用符合 href 屬性規則的 HTML 規則,因此 URL 會被改寫。
DJS (動態 JavaScript) 變數
這些是含有 JavaScript 內容的 JavaScript 變數。
本節分為下列部分:
DJS 語法
<Variable name="variableName" type="DJS" [source="*"]/>
其中
variable 是 JavaScript 變數,其值為 javascript。
DJS 範例
假設此網頁的基準 URL 是:
http://abc.sesta.com/dir1/dir2/dir3/jscript/dir4/page.html
網頁內容
//DJS Var
var dJSVar="var dJSimgsrc='/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.jpg';"
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.com/test/rewriter/test1/jscript/test.html","123");
window.open("gateway-URL/http://abc.sesta.com/index.html","gen",width=500,height=500);
//-->
</SCRIPT>
描述
第一個規則指出:名稱為 test 的函數中前兩個參數需要改寫。因此,即會改寫 test 函數的前兩個參數。第二個規則指出:window.open 函數的第一個參數需要改寫。window.open 函數中的 URL 會以含有函數參數的網頁的閘道 URL 及基準 URL 前置。
EXPRESSION 參數
這些參數採用表示式值,即 URL 中的計算結果。
本節分為下列部分:
EXPRESSION 參數語法
<Function name="functionName" paramPatterns="y" [type="EXPRESSION" source="*"]/>
其中
name 為函數名稱 (必須的)。
paramPatterns 指出需改寫的參數 (必須的)
y y 的位置會指出需改寫的函數參數。上列語法中,僅會改寫第一個參數。
type 指定 EXPRESSION 值 (可選)
source 呼叫此函數的網頁 URI。
EXPRESSION 參數範例
假設此網頁的基準 URL 是:
http://abc.sesta.com/dir1/dir2/page.html
網頁內容
<script language="JavaScript">
<!--
function jstest2(){
return ".html";
}
function jstest1(one){
return one;
}
var dir="/images/test"
var test1=jstest1(dir+"/test"+jstest2());
document.write("<a HREF="+test1+">TEST</a>");
alert(test1);
//-->
</SCRIPT>
規則
<Function type="EXPRESSION" name="jstest1" paramPatterns="y"/>
或者
<Function name="jstest1" paramPatterns="y"/>
輸出
<script language="JavaScript">
<!--
function jstest2(){
return ".html";
}
function jstest1(one){
return one;
}
var dir="/images/test"
var test1=jstest1(psSRAPRewriter_convert_expression(dir+"/test"+jstest2()));
document.write("<a HREF="+test1+">TEST</a>");
alert(test1);
//-->
</SCRIPT>
描述
因將之視為 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/index.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 內容的規則。其間的差異在於:XML 的屬性規則有大小寫之分,而 HTML 屬性規則則無。這是因為 XML 中建立了區分大小寫的特性,而 HTML 中未建立。
Rewriter 會依據屬性名稱轉譯屬性值。
本節分為下列部分:
屬性語法
<Attribute name="attributeName" [tag="*" type="URL" valuePatterns="*" source="*"]/>
其中
attributeName 為屬性名稱 (必須的)
tag 是標記名稱,即出現此屬性的標記 (可選,預設為 * 表示任何標記)
valuePatterns 請參閱在規則中使用式樣匹配。
source 是此 XML 網頁的 URI (可選,預設為 *表示在任何 XML 網頁中)
屬性範例
假設此網頁的基準 URL 是:
http://abc.sesta.com/test/rewriter/test1/xml/page.html
網頁內容
<xml>
<baseroot href="/root.html"/>
<img href="image.html"/>
<string href="1234|substring.html"/>
<check href="1234|string.html"/>
</xml>
規則
<Attribute name="href"tag="check" valuePatterns="1234|"/>
輸出
<xml>
<baseroot href="/root.html"/>
<img href="image.html"/>
<string href="1234|substring.html"/>
<check href="1234|gateway-URL/http://abc.sesta.com/test/rewriter/test1/xml/string.html"/>
</xml>
描述
上列範例中,僅改寫第四行,因為其符合規則中所指定的所有條件。請參閱在規則中使用式樣匹配。
用於 Cascading Style Sheet (串接樣式表) 的規則
HTML 網頁中的 Cascading Style Sheet (包含 CCS2) 會被轉譯。沒有任何針對此轉譯而定義的規則,因為 URL 僅出現在 url() 函數與 CSS 的匯入語法中。
用於 WML 的規則
WML 與 HTML 類似,因此 HTML 規則適用於 WML 內容。請對 WML 內容使用通用規則集。請參閱用於 HTML 內容的規則。
使用遞迴功能
Rewriter 使用遞迴功能在符合的字串式樣的結尾搜尋是否有相同的式樣。
例如,當 Rewriter 剖析下列字串時:
<a href="src=abc.jpg,src=bcd.jpg,src=xyz.jpg">
規則
<Attribute name="href" valuePatterns="*src=**"/>
僅會重寫第一個出現的式樣,看起來會像這個樣子:
<a href="src=http://jane.sun.com/abc.jpg">
但是如果您使用如下的遞迴選項,
<Attribute name="href" valuePatterns="REC:*src=**"/>;
Rewriter 在符合的字串式樣的結尾搜尋是否有相同的式樣,因此輸出將會是:
<a href="src=http://jane.sun.com/abc.jpg,src=http://jane.sun.com/bcd.jpg,src=http://jane.sun.com/xyz.jpg">
在「閘道」服務中配置 Rewriter藉由使用 [Rewriter] 標籤下的 [閘道] 服務,您可以執行下列兩種工作 - 基礎與進階:
基礎作業
啟用所有 URI 的重寫
若您啟用閘道服務中 [啟用所有 URI 的重寫] 選項,則 Rewriter 會重寫所有 URI 而不會將其於 [網域與子網域代理伺服器清單] 中的項目進行核對。忽略網域與子網域清單的代理伺服器項目。
若要啟用閘道以改寫所有 URI
建立 URI 與規則集對映清單
規則集會建立於 Access Manager 管理主控台中 Portal Server 配置之下的 Rewriter 服務中。有關詳細資料,請參閱「Portal Server 管理指南」。
建立規則集之後,可以使用 [將 URI 對映至規則集] 清單將網域與規則集關聯在一起。下列兩個項目會依預設新增至 [將 URI 對映至規則集] 欄位:
這表示,網域為 sun.com 之入口網站目錄的所有網頁,將套用 default_gateway_ruleset。對於其他頁面,則套用常規規則集。default_gateway_ruleset 與 generic_ruleset 是預先封裝的規則集。
備註
對於所有顯示於標準 Portal Desktop 中的內容,將使用 default_gateway_ruleset 規則集,與取得內容處無關。
例如,假設標準 Portal Desktop 被配置為從 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 對應至規則集
- 以管理員的身份登入 Access Manager 管理主控台。
- 選取 [服務配置] 標籤。
- 按一下 [SRA 配置] 下 [閘道] 旁的箭頭。
將顯示 [閘道] 頁。
- 選取您要設定其屬性的閘道設定檔。
便會顯示 [編輯閘道設定檔] 頁面。
- 按一下 [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 對映
- 以管理員的身份登入 Access Manager 管理主控台。
- 選取 [服務配置] 標籤。
- 按一下 [SRA 配置] 下 [閘道] 旁的箭頭。
將顯示 [閘道] 頁。
- 按一下您要設定其屬性的閘道設定檔。
便會顯示 [編輯閘道設定檔] 頁面。
- 按一下 [Rewriter] 標籤。
- 捲動至 [將剖析器對映至 MIME 類型] 欄位,並在編輯方塊中新增需要的 MIME 類型。使用分號或逗號以分隔多個項目。
以 HTML=text/html;text/htm 格式指定項目
- 按一下 [新增] 以新增需要的項目至清單中。
- 按一下 [儲存] 以記錄變更。
- 從終端機視窗重新啟動 [閘道]:
gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start
建立不要重寫的 URI 清單
這個規則表示如果頁面上顯示有 URL,例如 http://host.domain.com,該頁面就不會被重寫。但是如果該頁面包含任何其他 URL,該頁面就會被重寫。如果您不需要 URI 為 http://host.domain.com 的頁面,請新增一個規則集對映:http://host.domain.com"|null_ruleset
若要指定不要重寫的 URI
- 以管理員的身份登入 Access Manager 管理主控台。
- 選取 [服務配置] 標籤。
- 按一下 [SRA 配置] 下 [閘道] 旁的箭頭。
將顯示 [閘道] 頁。
- 按一下您要設定其屬性的閘道設定檔。
便會顯示 [編輯閘道設定檔] 頁面。
- 按一下 [Rewriter] 標籤,[基本] 子區段。
- 捲動至 [不要重寫的 URI] 欄位,並在編輯方塊中新增 URI。
備註:即使 href 規則是規則集的一部分,新增 #* 至這個清單會允許改寫 URI。
- 按一下 [儲存] 以記錄變更。
- 從終端機視窗重新啟動 [閘道]:
gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start
指定預設網域
當 URL 僅包括主機名稱而沒有網域與子網域時,預設網域與子網域將特別有用。在此情況下,[閘道] 將假設主機名稱位於預設網域與子網域中,並繼續執行相應的操作。
例如,若 URL 中的主機名稱為 host1,且預設網域與子網域被指定為 red.sesta.com,則主機名稱會被解析為 host1.red.sesta.com。
若要指定預設網域
進階作業
啟用 MIME 推測
Rewriter 會根據網頁的 MIME 類型選擇剖析器。有些 Web 伺服器,如 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 清單
使閘道協定與原始 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/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 是預設的除錯目錄。
- 從終端機視窗重新啟動 [閘道]:
gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start
除錯檔案名稱
當除錯層級設定為 message 時,除錯指令會產生一組檔案。表 3-2 列出 Rewriter 檔案,及其中所包含的資訊。
除了上述檔案之外,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
工作範例本節包括:
這些頁面範例位於 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.gif">../images/</a>
// 由於指定的是相對路徑,因此會前置閘道 URL 與 portal-server-URL (附有所需子目錄)。此連結將無法作用,因為在所提供之範例結構的 HTML 目錄下沒有名為 images 的目錄。
<br><br>
4 href <a href="gateway-URL/portal-server-URL/rewriter/HTML/attrib/images/logo.gif">images/..</a> <br><br>
// 由於指定的是相對路徑,因此會前置閘道 URL 與 Portal Server URL (附有所需子目錄)。
5. href <a href="gateway-URL/portal-server-URL/rewriter/images/logo.gif">../../images/</a> <br><br>
// 由於指定的是相對路徑,因此會前置閘道 URL 與 Portal Server URL (附有所需子目錄)。此連結將無法作用,因為在所提供之範例結構的 Rewriter 目錄下沒有名為 images 的目錄。
Rewriting ends
</html>
HTML 動態 JavaScript 記號的範例
若要使用 HTML JavaScript 記號範例:
- 您可自下列路徑存取此範例:
portal-server-URL/rewriter/HTML/jstokens/JStokens.html
- 將此範例中指定的規則新增至 [改寫 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。
- 在 Access Manager 管理主控台的 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;">
// 所有敘述是依照此範例重寫。已在每種情況中前置閘道 URL 與 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 中。
- 在 Access Manager 管理主控台的 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.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>
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 中。
- 在 Access Manager 管理主控台的 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/appletcode=RewriteURLinApplet.class archive=/test>
// 改寫此 URL 是因為規則 <Attribute name="codebase"/> 已成為 default_gateway_ruleset 檔案的一部分。將前置閘道與 Portal Server URL (附有至 appletcode 目錄的路徑。
<param name=Test1 value="gateway-URL/portal-server-URL/index.html">
// 改寫此 URL 是因為此網頁的基準 URL 為 rule1.html,且參數名稱符合規則中指定的參數 Test*。由於已將 index.html 指定放置於根層級,因此將直接前置閘道與 Portal Server URL。
<param name=Test2 value="gateway-URL/portal-server-URL/rewriter/HTML/index.html">
// 改寫此 URL 是因為此網頁的基準 URL 為 rule1.html,且參數名稱符合規則中指定的參數 Test*。將依需要前置路徑。
<param name=Test3 value="gateway-URL/portal-server-URL/rewriter/index.html">
// 改寫此 URL 是因為此網頁的基準 URL 為 rule1.html,且參數名稱符合規則中指定的參數 Test*。將依需要前置路徑。
</APPLET>
Rewriting ends
</HTML>
JavaScript 內容範例
JavaScript URL 變數的範例
若要使用 JavaScript URL 變數範例
- 您可自下列路徑存取此範例:
portal-server-URL/rewriter/JavaScript/variables/url/js_urls.html
- 請確定您已於 [閘道] 服務的 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com。
若未定義,則會採用直接連接,且不前置閘道 URL。
- 將此範例中指定的規則新增至 [改寫 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。
- 在 Access Manager 管理主控台的 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/variables/url/tmp/tmp.jpg";
var imgsrc="gateway-URL/portal-server-URL/rewriter/JavaScript/variables/tmp/tmp.jpg";
var imgsrc="gateway-URL/portal-server-URL/rewriter/JavaScript/tmp/tmp.jpg";
var imgsrc="gateway-URL/http://abc.sesta.com/tmp/tmp.jpg";
var imgsrc="gateway-URL/portal-server-URL/rewriter/tmp/tmp.jpg";
var imgsrc="gateway-URL/portal-server-URL/rewriter/JavaScript/variables/url/tmp/tmp.jpg";
// 上列所有 URL 皆為規則中所指定的 URL 類型且名稱為 imgsrc 的 JavaScript 變數。因此皆會前置閘道與 Portal Server URL。將依需前置位於 Portal Server URL 後的路徑。
//-->
</SCRIPT>
<br>
Testing JavaScript variables!
<br>
<img src="gateway URL/portal-server-URL/rewriter/JavaScript/variables/url/images/logo.gif">
// 改寫此行是因為已於 default_gateway_ruleset 中定義規則 <Attribute name="src"/>。
<br>
Image
</body>
<br>
Rewriting ends
</html>
JavaScript EXPRESSION 變數範例
若要使用 JavaScript EXPRESSION 變數範例
- 您可自下列路徑存取此範例:
portal-server-URL/rewriter/JavaScript/variables/expr/expr.html
- 將此範例中指定的規則新增 (若尚不存在) 至 [改寫 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。
- 在 Access Manager 管理主控台的 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="EXPRESSION" 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 中。在 Access Manager 管理主控台的 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/test.html>"
// JavaScript DHTML 規則會將 dhtmlVar 的右側識別為動態 HTML 內容。因此會套用 default_gateway_ruleset 檔案中的 HTML 規則。動態 HTML 包含 href 屬性。default_gateway_ruleset 定義規則 <Attribute name="href"/>。因此會改寫 href 屬性的值。但是 URL 並非絕對,因此網頁的基準 URL 與所需子目錄會取代相對 URL。最後會前置閘道 URL 以導出最後的改寫輸出。
var dhtmlVar="<a href=gateway-URL/portal-server-URL/../images/test.html>"
// 雖然已附加此網頁的基準 URL,且已前置閘道 URL,但是最後的 URL 卻無效。這是因為初始 URL /../images/test.html 不正確。
var dhtmlVar="<a href=gateway-URL/portal-server-URL/images/test.html>"
// 同樣,JavaScript DHTML 規則會將右側識別為動態 HTML 內容,並將之傳送至 HTML 規則。將套用 default_gateway_ruleset 中的 HTML 規則 <Attribute name="href"/>,且已如所示改寫陳述式。已前置閘道 URL 與 Portal Server URL。
var dhtmlVar="<a href=gateway URL/portal-server-URL/rewriter/JavaScript/variables/dhtml/images/test.html>"
var dhtmlVar="<a href=gateway URL/http://abc.sesta.com/images/test.html>"
var dhtmlVar="<img src=gateway-URL/http://abc.sesta.com/images/test.html>"
// JavaScript DHTML 規則會識別右側的動態 HTML 內容,並將陳述式傳送至 HTML 規則。將套用 default_gateway_ruleset 中的 <Attribute name="src"/> 規則。由於此 URL 是絕對 URL,因此僅需前置閘道 URL。請確定您已於 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com 以便改寫此 URL。
//-->
</SCRIPT>
<br><br>
Testing DHTML Variables
<br><br>
<img src="gateway-URL/portal-server-URL/rewriter/JavaScript/variables/dhtml/images/logo.gif">
// 改寫此行是因為已於 default_gateway_ruleset 中定義規則 <Attribute name="src"/>。
<br><br>
Image
</body>
</html>
JavaScript DJS 變數的範例
若要使用 JavaScript DJS 變數範例
- 您可自下列路徑存取此範例:
portal-server-URL/rewriter/JavaScript/variables/djs/djs.html
- 請確定您已於 [閘道] 服務的 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com。若未定義,則會採用直接連接,且不前置閘道 URL。
- 將此範例中指定的兩個規則新增 (若尚不存在) 至 [改寫 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。在 Access Manager 管理主控台的 Portal Server 配置底下,編輯 Rewriter 服務中的 default_gateway_ruleset。
- 重新啟動 [閘道]:
gateway-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 中。
- 在 Access Manager 管理主控台的 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 loaded.
</body>
</html>
規則
<Variable name="window.location.pathname" type="SYSTEM"/>
改寫後的 HTML
<html>
<head>
<title>JavaScript SYSTEM Variables Test Page</title>
</head>
<body>
<SCRIPT>
convertsystem function definition...
</SCRIPT>
<script LANGUAGE="Javascript">
<!--
//SYSTEM Var
alert(psSRAPRewriter_convert_system(window.location, window.location.pathname,"window.location"));
// Rewriter 會將 window.location.pathname 識別為 JavaScript SYSTEM 變數。此變數的值無法於伺服器端判定。因此 Rewriter 會在變數前前置 psSRAPRewriter_convert_pathname 函數。此包裝函數可於用戶端判定此變數的值,然後依需要改寫。
//-->
</SCRIPT>
Testing JavaScript SYSTEM Variables
<br>
This page displays the path where the current page is located when loaded.
</body>
</html>
JavaScript URL 函數的範例
若要使用 JavaScript URL 函數範例
- 您可自下列路徑存取此範例:
portal-server-URL/rewriter/JavaScript/functions/url/url.html
- 將此範例中指定的規則新增 (若尚不存在) 至 [改寫 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。在 Access Manager 管理主控台的 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,height=500);
//-->
</SCRIPT>
</body>
</html>
JavaScript EXPRESSION 函數的範例
若要使用 JavaScript EXPRESSION 函數範例
- 您可自下列路徑存取此範例:
portal-server-URL/rewriter/JavaScript/functions/expr/expr.html
- 將此範例中指定的規則新增 (若尚不存在) 至 [改寫 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。
- 在 Access Manager 管理主控台的 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"+jstest2()));
// 此規則指出函數 (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 中。
- 在 Access Manager 管理主控台的 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/functions/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 中。在 Access Manager 管理主控台的 Portal Server 配置底下,編輯 Rewriter 服務中的 default_gateway_ruleset。
- 重新啟動 [閘道]:
gateway-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.sesta.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.html"/></xml>
// 改寫此陳述式是因為其符合規則中所指定的條件。Attribute name 是 href,tag 是 check,valuePatterns 則是 1234。在 valuePatterns 後面的字串會被改寫。請參閱在規則中使用式樣匹配以取得 valuePatterns 的詳細資訊。
</body>
Rewriting ends
</html>
案例研究本節包括某範例郵件用戶端的來源 HTML 網頁。此案例研究並未囊括所有可能的情況與規則。這只是一個範例規則集,用以幫助您為自己的內部網路網頁收集規則。
假設狀況
針對此案例研究訂出下列假設狀態:
範例網頁 1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0053)http://abc.siroe.com/mailclient/destin/?Cmd=navbar -->
<HTML XMLNS:WM><HEAD>
<META http-equiv=Content-Type content="text/html; CHARSET=utf-8">
<META http-equiv=Pragma content=no-cache>
<META http-equiv=Expires content=0><!--Copyright (c) 2000 Microsoft Corporation.All rights reserved.--><!--CURRENT FILE== "IE5" "WIN32" navbar -->
<STYLE>WM\:DROPMENU {
BEHAVIOR:url(http://abc.siroe.com/mailweb/controls/dropmenu.htc)
}
</STYLE>
<LINK href="destin_files/navbar.css" type="text/css" rel="stylesheet">
<SCRIPT language=javascript>
var g_szUserBase= "http://abc.siroe.com/mailclient/destin"+"/";
var g_szFolder= ".";
var g_szVirtualRoot= "http://abc.siroe.com/mailweb";
var g_szImagePath= g_szVirtualRoot + "/img/";
</SCRIPT>
<SCRIPT src="/destin_files/navbar.js"></SCRIPT>
<META content="MSHTML 6.00.2600.0" name=GENERATOR></HEAD>
<BODY oncontextmenu="return(event.ctrlKey)"; onselectstart="return(false)";
id="outbar_mainbody" style="BACKGROUND-COLOR:appworkspace" leftMargin=0
topMargin=0 scroll=no>
<TABLE class=nbTableMain id=nbTableMain style="HEIGHT:100%" cellSpacing=0
cols=1 cellPadding=0 rows="2">
<TBODY>
<TR>
<TD class=treeBrand>
<DIV class=treeOFLOW><IMG
style="PADDING-RIGHT:0px; PADDING-LEFT:0px; PADDING-BOTTOM:0px; PADDING-TOP:0px"
src="/destin_files/logo-ie5.gif" border=0></DIV></TD></TR>
<TR height="100%">
<TD>
<TABLE class=nbTable cellSpacing=0 cols=1 cellPadding=0 rows="4">
<TBODY>
<TR>
<TD class=nbFlybar id=show_navbar onkeydown=flybar_keydown()
onclick="ToggleTab(this.id) " tabIndex="0" noWrap>
<DIV class=treeOFLOW>Shortcuts</DIV></TD></TR>
<TR style="HEIGHT: 100%">
<TD id="idOutbarpane" style="TEXT-ALIGN:center" vAlign=top><A
id=inbox
href="http://abc.siroe.com/mailclient/destin/Inbox/?Cmd=contents&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 顯示範例規則集與案例研究之間的對應關係。
Outlook Web Access 的規則集
SRA 軟體支援 Sun Java System Web Server 和 IBM 應用程式伺服器上 Outlook Web Access (OWA) 的 MS Exchange 2000 SP3 以及 MS Exchange 2003 安裝。
若要配置 OWA 規則集
使用公用資料夾
6.x 與 3.0 規則集對映下表列出 SRA Rewriter 規則與前版 Portal Server 產品的對映關係。