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

第 4 章 使用重写器

Secure Remote Access 的重写器组件允许用户利用解析 Web 页面来通过网关访问内联网 Web 页面。

本章包括以下主题:

重写器简介

借助 Secure Remote Access 的重写器组件,最终用户可以浏览内联网,方法是修改 Web 页上引用的“统一资源标识符”(Uniform Resource Identifier, URI),以使其指向网关。URI 定义了一种在任何注册名称空间中封装名称的方法,并用名称空间对名称进行标记。最常用的 URI 类型为统一资源定位符 (Uniform Resource Locators, URL)。重写器仅支持 HTTP 或 HTTPS。此支持与协议的大小写无关。重写器仅支持出现在相对 URL 中的反斜线符号。


示例 4–1 重写 URL

http://abc.sesta.com\\index.html 会被重写。

而以下这些 URL 不会被重写:http:\\\\abc.sesta.com http:/abc.com


字符集编码

HTTP 标准要求 HTTP 报头或 HTML 元标记为网页指定一个字符集。但有时无法获得此信息。字符集必须已知,以便设置数据编码并按照创建者的意图显示数据。

要检测字符集,请从 Java Enterprise System Accessory CD 安装 SUNWjchdt 软件包。如果安装了此产品,重写器会检测到它,并在需要时使用。


注 –

使用此产品可能会影响性能,因此只有需要时才应安装。有关安装、配置以及使用的详细信息,参见 jcharset_readme.txt


重写器使用方案

当用户想通过网关访问内联网网页时,可使用重写器来获得网页。重写器由 URLScraper 和网关使用。

URLScraper

URL Scraper 提供者可从配置的 URI 获取内容。将这些 URI 发送到浏览器之前,它会将所有相对 URI 扩展为绝对 URI。

例如,如果用户尝试用以下方式访问站点:

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

重写器会将其转换为:

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

其中 http://yahoo.com/test/ 为页面的基 URL。

有关 URLScraper 提供者的详细信息,参见 Sun Java System Portal Server 管理指南

网关

网关从 Internet 门户获取内容。在将内容发送到浏览器之前,它将网关 URI 追加到现有 URI 之前,使来自浏览器的后续 URI 请求可到达网关。

例如,如果有某位用户尝试用以下方式访问某台 Internet 机器上的 HTML 页面:

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

重写器会在该 URL 前加上一个指向网关的引用,如下所示:

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

当用户单击与该锚定点相关联的某个链接时,浏览器便会与网关联络。网关会从 mymachine.intranet.com 中获取 mypage.html 的内容。

网关使用若干规则来确定要重写已获取网页的哪些要素。

编写规则集

有关定义规则集的详细信息,参见 Portal Server 管理指南。创建新规则集后,需要定义所需的规则。

本节涵盖以下主题:

公共接口(规则集 DTD)

规则集 DTD:

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

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

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

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

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

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

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

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

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

注 –

除必需的属性值不能只为 * 以外,您可以使用 * 作为规则值的一部分。此类规则会被忽略,但会将消息记录在 RuleSetInfo 日志文件中。有关该日志文件的信息,参见调试文件名称


XML DTD 示例

本节包含一个示例规则集。第 140 页的“案例研究”用于举例说明重写器是如何解释这些规则的。

<?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>

规则编写步骤

编写规则的一般程序为:

规则集指导原则

当创建规则集时,请谨记以下内容:

定义规则集根元素

规则集根元素有两个属性:

使用递归功能

重写器使用递归功能对同一模式进行搜索,直到匹配字符串模式的末尾。

例如,重写器解析以下字符串时:

<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=**"/>;

重写器会对同一模式进行搜索,直到匹配字符串模式的末尾,因此输出为:

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

定义基于语言的规则

规则建立在下列语言基础上:

HTML 内容规则

网页中的 HTML 内容可进一步分成属性、表单和 applet。相应地,HTML 内容规则分为以下几类:

HTML 内容属性规则

该规则用于确定标记都有哪些属性的值需要重写。属性值可以是简单 URL,也可以是 JavaScript 或 DHTML 内容。例如:

本节说明以下内容:

属性规则语法

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

其中:

attributeName 是属性的名称(强制项)

tag 是属性所属的标记(可选项,默认值是 *,指任何标记)

valuePatterns 参见在规则中使用模式匹配

source 指定在其中定义该属性的页的 URI(可选项,默认值是 *,指在任何页中)

type 指定值的类型(可选项)。它们可以是:

URL - 简单 URL(默认值)。

DHMTL - DHTML 内容。这种内容以标准 HTML 内容的形式显示,并且用于 Microsoft HTC 格式文件。

DJS - JavaScript 内容。所有 HTML 事件处理程序(如 onClick 和 onMouseover)都用此 HTML 属性嵌入 JavaScript。

属性规则示例

假定页的基 URL 为:

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

页面内容:

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

规则

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

输出

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

描述

由于要重写的 URL 已是一个绝对 URL,所以只在此 URL 前加上了网关 URL。

DJS 属性示例

假定页的基 URL 为:

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

页面内容:

<Form>

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

</Form>

规则

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

输出

<Form>

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

</Form>

描述

需要两项规则来重写指定的页内容。第一项规则确定 onClick JavaScript 标志。第二项规则确定 check 函数需要重写的参数。在本例中,只会重写第一个参数,因为 paramPatterns 用值 y 代替了第一个参数。

会在所需参数前加上网关 URL 以及这些 JavaScript 标志所在页的基 URL。

HTML 内容的表单规则

用户浏览的 HTML 页可能会包含表单。一些表单元素可能会以 URL 作为值。

本节分为下列各小部分:

表单规则语法

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

其中

name 是表单的名称(强制项)

field 是表单中的字段,其中含有需要重写的值(强制项)

valuePatterns 参见在规则中使用模式匹配

source 是该表单定义所在 html 页的 URL(可选项,默认值是 *,指在任何页中)

表单规则示例

假定页的基 URL 为:

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

页内容

假定页 URI 是 form.html,并且它位于服务器的根目录下。

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

要重写 form1 中名为 abc1 的隐藏字段值中出现的 /text.html,需要下列规则。

规则

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

输出

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

描述

action 标记是用某些已定义的 HTML 属性规则进行重写的。

输入标记属性值的 value 的重写方式如输出中所示。将会查找指定的 valuePatterns,并通过在前面加上网关 URL 以及页的基 URL 来重写紧随在匹配的 valuePatterns 之后的所有内容。参见在规则中使用模式匹配

HTML 内容的 Applet 规则

单个网页可以包含许多 applet,而且每个 applet 可以包含许多参数。重写器将用规则中指定的值与 applet 的 HTML 定义进行匹配,并修改 applet 参数定义中出现的 URL 值。此替换在服务器处执行,用户浏览特定网页时并不会执行。此项规则会确定并重写 applet 以及 HTML 内容对象标记中的参数。

本节分为下列各小部分:

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>

描述

由于 <Attribute name="codebase"/>default_gateway_ruleset 中的一项已定义规则,因此会重写 codebase 属性

名称以 Test 开头的所有参数均会被重写。并且,会在 param 标记的 value 属性前加上 applet 代码所在页的基 URL 以及网关 URL。

在规则中使用模式匹配

您可以使用 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 后面没有文本。这样,重写器就没有要重写的文本。您必须将 * 与另一字符串连起来使用,例如 *abc。此时,会重写紧随在 *abc 之后的所有内容。


注 –

可在规则的任何字段中使用星号 (*) 作为通配符。不过,规则中的所有字段不能全都包含 *。如果所有字段都包含 *,则会忽略该规则。不会显示错误消息。


可以与原始语句中出现的分隔符(分号或逗号)联合使用 * 或 ** 来分隔多个字段。一个星号 (*) 匹配任何不进行重写的字段,而两个星号 (**) 匹配任何需要重写的字段。

在 valuePatterns 中使用通配符列出了 * 通配符的一些用法示例。

表 4–1 * 通配符用法示例

URL 

valuePatterns 

描述 

url1, url2, url3, url4

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

由于 ** 指示了要重写的部分,因此会重写 url1url3

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

valuePatterns = "*ABC"

仅重写 http://host1.sesta.com/dir1.html 部分。需要重写 *ABC 后的所有内容。

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

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

重写 dir2dir4url1。最后一个需要重写的字段不必用 ** 指出。

JavaScript 内容规则

JavaScript 可以在各种不同位置包含 URL。重写器不能直接解析 JavaScript 并确定出 URL 部分。需要编写一组特殊的规则来帮助 JavaScript 处理器确定和转换 URL。

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

变量

变量的通用语法为:

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

根据 JavaScript 变量所含值的类型,可将它们细分为以下 5 类:

URL 变量

变量值为可作为 URL 对待的简单字符串。

本节分为下列各小部分:

URL 变量语法

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

其中

variableName 是变量的名称。variableName 的值会被重写(强制项)

type 是 URL 变量(强制项,其值必须是 URL)

source 是该 JavaScript 变量所在页的 URI(可选项,默认值是 *,指在任何页中)

URL 变量示例

假定基 URL 为:

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

页内容

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

规则

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

输出

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

描述

会重写 URL 类型并且名称以 imgsrc 开头的所有变量。对于输出中的第一行,在其前面加上了网关 URL 以及变量所在页的基 URL。第二行已包含绝对路径,因此只在其前面加上了网关 URL。由于第三个 var imagsrc2 的值不是字符串,而是其他 JavaScript 值,所以不会对其进行重写。

EXPRESSION 变量

表达式变量的右侧是一个表达式。该表达式的结果是一个 URL。由于重写器无法对服务器上的此类表达式求值,所以它会向 HTML 页追加一个 JavaScript 函数 (psSRAPRewriter_convert_expression)。该函数将此表达式视为一个参数,并在客户机浏览器中对其进行求值以得出所需的 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";

描述

会在第一行的表达式变量 expvar 右侧的前面加上函数 psSRAPRewriter_convert_expression。该函数会在运行时处理此表达式并重写相应内容。在第三行中,值被重写为一个简单的 URL。

DHTML(动态 HTML)变量

这些变量是包含 HTML 内容的 JavaScript 变量。

本节分为下列各小部分:

DHTML 语法

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

其中

variableName 是具有 DHTML 内容的 JavaScript 变量的名称(强制项)

type 是变量的类型(强制项,其值必须是 DHTML)

source 是页的 URL(可选项,默认值是 *,指在任何页中)

DHTML 示例

假定页的基 URL 为:

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

页内容

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

规则

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

输出

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

描述

JavaScript 解析器会将 dhtmlVar 的值作为 HTML 内容读取,并通过 HTML 解析器发送此内容。HTML 解析器会应用其中有 href 属性规则匹配的 HTML 规则,因此 URL 会被重写。

DJS(动态 JavaScript)变量

这些变量是包含 JavaScript 内容的 JavaScript 变量。

本节分为下列各小部分:

DJS 语法

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

其中

variable 是值为 javascript 的 JavaScript 变量。

DJS 示例

假定页的基 URL 为:

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

页内容

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

规则

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

输出

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

描述

这里需要两项规则。第一项规则用于查找动态 JavaScript 变量 dJSVar。该变量的值同样是 URL 类型的 JavaScript。第二项规则用于重写该 JavaScript 变量的值。

SYSTEM 变量

这些变量是指不是由用户声明且只得到有限支持的变量。它们可用作 JavaScript 标准的一部分。例如,window.location.pathname

本节分为下列各小部分:

SYSTEM 变量语法

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

其中

variableName 是 JavaScript 系统变量(强制项,其值可以是与以下模式匹配的任何值:document.URL、document.domain、location、doument.location、location.pathname、location.href、location.protocol、location.hostname、location.host 和 location.port。上述所有模式都存在于 generic_ruleset 中。不要修改这些系统变量规则。)

type 指定系统类型值(强制项,且值为 DJS)

source 是此页的 URI(可选项,默认值是 *,指在任何页中)

SYSTEM 变量示例

假定页的基 URL 为:

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

页内容

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

规则

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

输出

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

描述

重写器会查找与规则匹配的系统变量,然后在其前面加上 psSRAPRewriter_convert_system 函数。该函数会在运行时处理此系统变量并相应地重写最终得到的 URL。

函数参数

值需重写的函数参数分为以下 4 类:

一般语法

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

其中

name 是 JavaScript 函数的名称(强制项)

paramPatterns 指定需要重写的参数(强制项)

y y 的位置指示需要重写的参数。例如,在语法中,第一个参数需要重写,但不能重写第二个参数

type 指定该参数所需值的类型(可选项,默认值是 EXPRESSION 类型)

source 是页的源 URI(可选项,默认值是 *,指在任何页中)

URL 参数

函数将该参数视为一个字符串并且该字符串可以作为 URL 对待。

本节分为下列各小部分:

URL 参数语法

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

其中

name 是具有 URL 类型参数的函数的名称(强制项)

paramPatterns 指定需要重写的参数(强制项)

y y 的位置指示需要重写的参数。例如,在语法中,第一个参数需要重写,但不能重写第二个参数

type 是函数的类型(强制项,其值必须是 URL)

source 是具有该函数调用的页的 URL(可选项,默认值是 *,指在任何 URL 中)

URL 参数示例

假定页的基 URL 为:

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

页内容

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

规则

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

输出

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

描述

第一项规则指定需要重写名为 test 的函数中的前两个参数。因此会重写 test 函数的前两个参数。第二项规则指定需要重写 window.open 函数的第一个参数。会在 window.open 函数中的 URL 前面加上网关 URL 以及包含函数参数的页的基 URL。

EXPRESSION 参数

这些参数接受表达式值,表达式计算结果为 URL。

本节分为下列各小部分:

EXPRESSION 参数语法

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

其中

name 是函数的名称(强制项)

paramPatterns 指定需要重写的参数(强制项)

y y 的位置指示需要重写的函数参数。在上述语法中,只会重写第一个参数

type 指定 EXPRESSION 值(可选项)

source 是其中调用了该函数的页的 URI

EXPRESSION 参数示例

假定页的基 URL 为:

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

页内容

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

规则

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

输出

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

描述

此规则将 jstest1 函数的第一个参数视为 EXPRESSION 函数参数,以此来指定需要重写该参数。在示例页内容中,第一个参数是一个表达式,只会在运行时对其进行求值。重写器会在该表达式前加上 psSRAPRewriter_convert_expression 函数。此表达式要进行求值,并且 psSRAPRewriter_convert_expression 函数会在运行时重写输出结果。


注 –

在上述示例中,不需要在 JavaScript 变量规则中包含 test1jstest1 的函数规则会负责执行重写工作。


DHTML 参数

值为 HTML 的函数参数

本机 JavaScript 方法(如可动态生成 HTML 页的 document.write())归属于这一类别。

本节分为下列各小部分:

DHTML 参数语法

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

其中

name 是函数的名称

paramPatterns 指定需要重写的参数(强制项)

y y 的位置指示需要重写的函数参数。在上述语法中,只会重写第一个参数

DHTML 参数示例

假定页的基 URL 为:

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

页内容

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

规则

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

输出

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

描述

第一项规则指定需要重写函数 document.write 中的第一个参数。第二项规则指定需要重写函数 document.writeln 中的第一个参数。第三项规则是一项简单的 HTML 规则,它指定需要重写名为 href 的所有属性。在示例中,DHTML 参数规则将会确定函数中需要重写的参数。然后会应用 HTML 属性规则来实际重写已确定的参数。

DJS 参数

值为 JavaScript 的函数参数。

本节分为下列各小部分:

DJS 参数语法

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

其中

name 是含有一个参数 DJS 的函数的名称(强制项)

paramPatterns 指定上述函数中的哪个参数是 DJS(强制项)

y y 的位置指示需要重写的函数参数。在上述语法中,只会重写第一个参数

type 为 DJS(强制项)

source 是页的 URI(可选项,默认值为 *,指任何 URI)

DJS 参数示例

假定页的基 URL 为:

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

页内容

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

规则

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

输出

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

描述

第一项规则指定需要重写函数 NavBarMenuItem 中的第二个包含 JavaScript 的参数。在 JavaScript 中,变量 top.location 也需要重写。该变量是使用第二项规则来重写的。

XML 内容规则

网页可以包含 XML 内容,而后者又可以包含 URL。需要重写的 XML 内容分为以下两类:

标记文本

本规则用于重写标记元素的 PCDATA 或 CDATA。

本节分为下列各小部分:

标记文本语法

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

其中

tagName 是标记的名称

attributePatterns 是与该标记相应的属性及其值模式(可选项,指该标记根本无任何属性)

source 是该 xml 文件的 URI(可选项,默认值是 *,指任何 xml 页)

标记文本示例

假定页的基 URL 为:

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

页内容

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

规则

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

输出

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

描述

页内容的第一行包含属性示例。页内容中的第二行不包含具有属性呼叫名称且属性名称值为 src 的属性,因此不会进行任何重写。要重写该属性,也需要有 <TagText tag="attribute"/>

属性

XML 属性规则与 HTML 的属性规则类似。二者的区别在于,XML 的属性规则区分大小写,而 HTML 属性规则不区分大小写。这同样是因为 XML 中内置了对大小写的敏感性而 HTML 中则没有。

重写器会基于属性名称来转换属性值。

本节分为下列各小部分:

属性语法

<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 页中的“层叠样式表”(包括 CCS2)会进行转换。由于 URL 只在 CSS 的 url() 函数和导入语法中出现,因此没有为这种转换定义任何规则。

WML 规则

WML 与 HTML 类似,因此 HTML 规则适用于 WML 内容。使用 WML 内容的一般规则集。参见 HTML 内容规则

使用递归功能

重写器使用递归功能对同一模式进行搜索,直到匹配字符串模式的末尾。

例如,重写器解析以下字符串时:

<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=**"/>;

重写器会对同一模式进行搜索,直到匹配字符串模式的末尾,因此输出为:

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

使用调试日志排除故障

要排除重写器故障,需要启用调试日志。

“调试消息”分为以下几类。

设置重写器调试级别

Procedure设置重写器调试级别

  1. 以根用户身份登录到网关机器并编辑以下文件:


    gateway-install-root/SUNWam/config/AMConfig-instance-name.properties
  2. 设置调试级别:


    com.iplanet.services.debug.level=

    调试级别为:

    error - 只将严重错误记录到调试文件中。出现此类错误时,重写器通常会停止工作。

    warning - 记录警告消息。

    message - 记录所有调试消息。

    off - 不记录任何调试消息。

  3. AMConfig-instance-name .properties 文件的以下属性中,为调试文件指定目录:


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

    其中 /var/opt/SUNWam/debug 是默认调试目录。

  4. 从终端窗口中重新启动网关:


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

调试文件名称

当调试级别设置为 message 时,调试会生成一组文件。调试文件名称列出了重写器文件及其中包含的信息。

表 4–2 重写器调试文件

文件名 

信息 

RuleSetInfo 

包含重写时已使用的所有规则集。 

Original Pages 

包含页面 URI、resolveURI(若不同于页面 URI)、内容 MIME、已应用于该页的规则集、解析器 MIME,以及原始内容。 

与解析有关的特定错误/警告/消息也出现在本文件中。 

在消息模式下,会记录全部内容。在警告和错误模式下,只记录重写期间出现的异常。 

Rewritten Pages 

包含页面 URI、resolveURI(若不同于页 URI)、内容 MIME、已应用于该页的规则集、解析器 MIME,以及重写后的内容。 

当将调试模式设置为消息时,将会填写本文件。 

Unaffected Pages 

包含未经修改的页列表。 

URIInfo Pages 

包含已找到并经过转换的 URL。该文件会记录内容仍与原始数据相同的所有页的详细信息。 

所记录的详细信息有:页 URI、MIME 及编码数据、重写时所用的规则集 ID,以及解析器 MIME。 

除了上述文件以外,重写器还会为调试消息生成一个文件,该文件未收入上述文件中。此文件名由两部分组成:第一部分是 pwRewriter psSRARewriter;第二部分是使用 portalgateway-profile-name 的扩展名。

调试文件在门户或网关中显示。这些文件在 AMConfig-instance-name.properties 文件指定的目录中。

重写器组件会生成下面的一组文件来帮助进行调试:

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

例如,如果使用网关上的重写器来转换页并且使用了默认网关配置文件,则调试时会创建下列文件:

psSRAPRewriter_RuleSetInfo.default

psSRAPRewriter_OriginalPages.default

psSRAPRewriter_RewrittenPages.default

psSRAPRewriter_UnaffectedPages.default

psSRAPRewriter_URIInfo.default

psSRAPRewriter.default

工作示例

本节包括:

这些示例页在 portal-server-URL /rewriter 目录下获得。在应用规则之前可以先浏览页面,然后再通过网关查看含有已重写输出的文件,以了解规则的工作方式。在一些示例中,规则已包含在 default_gateway_ruleset 中。在一些示例中,您可能需要将规则加入到 default_gateway_ruleset 中。这一点会在适当的地方提及。


注 –

某些语句以粗体形式出现,表示已对它们进行了重写。


提供了下列示例:

HTML

JavaScript

函数

XML

HTML 内容示例

HTML 属性示例

Procedure使用 HTML 属性示例

  1. 可从以下位置访问本示例:

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

  2. 确保在网关服务的“域和子域的代理”列表中定义了 abc.sesta.comhost1.siroe.com

    如果没有定义该项,则假定采用直接连接,不会在其前面加网关 URL。

    不需要将本范例中指定的规则添加到 default_gateway_ruleset 中,因为该规则已定义。

重写前的 HTML

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

规则

<Attribute name="href"/>

重写后的 HTML

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

// 由于已在 default_gateway_ruleset 中定义了 <Attrib name="href"/> 规则,所以会重写这个 URL。由于此 URL 已是绝对的,因此只在其前面加上了网关 URL。确保在网关服务的“域和子域的代理”列表中定义了 abc.sesta.com。否则,不会在其前面加网关 URL,因为此时将假定采用直接连接。

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

// 同样,需要在网关服务的“域和子域的代理”列表中定义 host1.siroe.com。否则,不会在其前面加网关 URL,因为此时将假定采用直接连接。

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

// 由于指定了相对路径,因此会随所需子目录一同在其前面加上网关 URL 和 portal-server-URL。此链接不会起作用,因为在所提供的示例结构中,HTML 目录下没有指定名为 images 的目录。

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

// 由于指定了相对路径,因此会随所需子目录一同在其前面加上网关 URL 和 Portal Server URL。

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

// 由于指定了相对路径,因此会随所需子目录一同在其前面加上网关 URL 和 Portal Server URL。此链接不会起作用,因为在所提供的示例结构中,Rewriter 目录下没有指定名为 images 的目录。

Rewriting ends</html>

HTML 动态 JavaScript 标志示例

本节讨论使用 HTML JavaScript 标志示例

Procedure使用 HTML JavaScript 标志示例:

  1. 可从以下位置访问本示例:

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

  2. 将本示例中指定的规则添加到“JavaScript 源重写规则”一节的 default_gateway_ruleset 中。

  3. 在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset

  4. 从终端窗口中重新启动网关:


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

重写前的 HTML

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

规则

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

注 –

<Function name="URL" name="Check" paramPatterns="y"/> 是 JavaScript 函数规则,在 JavaScript 函数示例中对其进行了详细解释。


重写后的 HTML

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

// 在本示例中所有语句均会被重写,并且在每种情况下都会在前面加上网关 URL 和 Portal Server URL。这是因为在 default_gateway_ruleset 文件中定义了 onAbortonBluronFocusonChangeonClick 的相应规则。重写器会检测 JavaScript 标志,并将其传递给 JavaScript 函数规则以便做进一步处理。示例中所列的第二项规则会通知重写器要重写哪个参数。

</body>
<br>

Rewriting ends

</html>

HTML 表单示例

Procedure使用表单示例

  1. 从以下位置访问此示例:

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

  2. 确保在网关服务的“域和子域的代理”列表中定义了 abc.sesta.com

    如果没有定义该项,则假定采用直接连接,不会在其前面加网关 URL。

  3. 将本示例中指定的规则添加到“HTML 属性重写规则”一节的 default_gateway_ruleset 中。

  4. 在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset

  5. 从终端窗口中重新启动网关:


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

重写前的 HTML 页

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

规则

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

重写后的 HTML 页

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

// 由于在 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">

// 由于 name 不匹配规则中指定的 field 名称,所以不会重写这个 URL。

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

// 由于在默认规则集中将 <Attribute name="action"/> 定义为 HTML 规则的一部分,所以会重写这个 URL。由于此 URL 已是绝对的,因此只需在其前面加上网关 URL。

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

// 由于表单名不匹配规则中指定的名称,所以不会重写这个 URL。

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

HTML Applet 示例

Procedure使用 Applet 示例

  1. 获得 applet 类文件。RewriteURLinApplet.class 文件位于以下位置:

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

    applet 代码所在页的基 URL 是:

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

  2. 将本示例中指定的规则添加到“HTML 属性重写规则”一节的 default_gateway_ruleset 中。

  3. 在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset

  4. 重新启动网关:


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

重写前的 HTML

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

规则

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

重写后的 HTML

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

// 由于规则 <Attribute name="codebase"/> 已呈现为 default_gateway_ruleset 文件的一部分,所以会重写这个 URL。网关和 Portal Server URL 会连同到 appletcode 目录的路径一起被加在其前面。

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

// 由于页的基 URL 是 rule1.html,并且参数名与规则中指定的参数 Test* 相匹配,所以会重写此 URL。由于 index.html 被指定位于根层级,因此会直接在其前面加上网关 URL 和 Portal Server URL。

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

// 由于页的基 URL 是 rule1.html,并且参数名与规则中指定的参数 Test* 相匹配,所以会重写此 URL。会根据需要在其前面加上相应的路径。

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

// 由于页的基 URL 是 rule1.html,并且参数名与规则中指定的参数 Test* 相匹配,所以会重写此 URL。会根据需要在其前面加上相应的路径。

</APPLET>
Rewriting ends
</HTML>

JavaScript 内容示例

JavaScript URL 变量示例

Procedure使用 JavaScript URL 变量示例

  1. 可从以下位置访问本示例:

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

  2. 确保在网关服务的“域和子域的代理”列表中定义了 abc.sesta.com

    如果没有定义该项,则假定采用直接连接,不会在其前面加网关 URL。

  3. 将本示例中指定的规则添加到“JavaScript 源重写规则”一节的 default_gateway_ruleset 中。

  4. 在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset

  5. 如果添加了此规则,请重新启动网关:


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

重写前的 HTML 页

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

规则

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

重写后的 HTML 页

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

// 如规则中指定的那样,所有上述 URL 都是 URL 类型且名称为 imgsrc 的 JavaScript 变量。因此会在它们前面加上网关 URL 和 Portal Server URL。根据需要,会在其前面加上跟在 Portal Server URL 后面的路径。

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

// 由于在 default_gateway_ruleset 中定义了规则 <Attribute name="src"/>,所以会重写该行

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

JavaScript EXPRESSION 变量示例

Procedure使用 JavaScript 表达式变量示例

  1. 可从以下位置访问本示例:

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

  2. 将本示例中指定的规则(如果尚不存在)添加到“JavaScript 源重写规则”一节的 default_gateway_ruleset 中。

  3. 在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset

  4. 如果添加了此规则,请重新启动网关:


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

重写前的 HTML 页

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

规则

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

重写后的 HTML 页

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

// 重写器会将该语句的右侧部分识别为 JavaScript EXPRESSION 变量。重写器不能在服务器端求解该表达式的值。因此,会在此表达式前面加上函数 psSRAPRewriter_convert_expression。在客户机端对此表达式进行求值,并根据需要对其进行重写。

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

// 使用了上一语句中 expvar 重写后的值来得出该表达式的值。由于结果是一个有效的 URL(在示例中,该位置有图形存在),因此链接将会起作用。

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

// 重写器会将 expvar 的右侧部分识别为字符串表达式。该表达式可以在服务器一方求解,因而会直接对其进行重写。

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

// 使用了上一语句中 expvar 重写后的值来得出该表达式的值。由于结果不是一个有效的 URL(在最终得出的位置不存在图形),因此链接将不起作用。

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

JavaScript DHTML 变量示例

Procedure使用 JavaScript DHTML 变量示例

  1. 可从以下位置访问本示例:

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

  2. 确保在网关服务的“域和子域的代理”列表中定义了 abc.sesta.com。如果没有定义该项,则假定采用直接连接,不会在其前面加网关 URL。

  3. 将本示例中指定的规则(如果尚不存在)添加到“JavaScript 源重写规则”一节的 default_gateway_ruleset 中。在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset

  4. 如果添加了此规则,请重新启动网关:


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

重写前的 HTML 页

<html>
<head>
<title>JavaScript DHTML Variable Test Page</title>
</head>
<body>
<script LANGUAGE="Javascript">
<!--
//DHTML Var
var dhtmlVar="<a href=../../images/test.html>"
var dhtmlVar="<a href=/../images/test.html>"
var dhtmlVar="<a href=/images/test.html>"
var dhtmlVar="<a href=images/test.html>"
var dhtmlVar="<a href=http://abc.sesta.com/images/test.html>"
var dhtmlVar="<img src=http://abc.sesta.com/images/test.html>"
//-->
</SCRIPT>
<br><br>
Testing DHTML Variables
<br><br>
<img src="images/logo.gif">IMAGE
</body>
</html>

规则

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

重写后的 HTML 页

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

// JavaScript DHTML 规则将 dhtmlVar 的右侧部分确定为动态 HTML 内容。因而,会应用 default_gateway_ruleset 文件中的 HTML 规则。动态 HTML 包含 href 属性。default_gateway_ruleset 定义了规则 <Attribute name="href"/>。因此,会重写 href 属性的值。但此 URL 不是绝对的;因此,会用页的基 URL 以及所需子目录来替换这个相对的 URL。接着在其前面加上网关 URL 以得出最终重写后的输出。

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

// 虽然附加了页的基 URL,并且在前面加上了网关 URL,但最终得到的 URL 不会起作用。这是因为初始 URL /../images/test.html 是错误的。

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

// 这里,JavaScript DHTML 规则同样将右侧部分确定为动态 HTML 内容,并将其传递给 HTML 规则。应用 default_gateway_ruleset 中的 HTML 规则 <Attribute name="href"/>,并按所示方式重写该语句。在其前面加上网关 URL 和 Portal Server URL。

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

// JavaScript DHTML 规则会确定出右侧的动态 HTML 内容,并将此语句传递给 HTML 规则。此时会应用 default_gateway_ruleset 中的 <Attribute name="src"/> 规则。由于此 URL 是绝对的,因此只需在其前面加上网关 URL。为重写该 URL,请确保在“域和子域的代理”列表中定义了 abc.sesta.com

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

// 由于在 default_gateway_ruleset 中定义了规则 <Attribute name="src"/>,所以会重写该行。

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

JavaScript DJS 变量示例

Procedure使用 JavaScript DJS 变量示例

  1. 可从以下位置访问本示例:

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

  2. 确保在网关服务的“域和子域的代理”列表中定义了 abc.sesta.com。如果没有定义该项,则假定采用直接连接,不会在其前面加网关 URL。

  3. 将本示例中指定的两项规则(如果尚不存在)添加到“JavaScript 源重写规则”一节的 default_gateway_ruleset 中。在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset

  4. 重新启动网关:


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

重写前的 HTML 页

<html>
<head>
<title>Dynamic JavaScript Variable Test Page</title>
</head>
<body>
<script LANGUAGE="Javascript">
<!--
var dJSVar="var dJSimgsrc=\q/tmp/tmp/jpg\q;"
var dJSVar="var dJSimgsrc=\q../../../tmp/tmp/jpg\q;"
var dJSVar="var dJSimgsrc=\qhttp://abc.sesta.com/tmp/tmp/jpg\q;"
//-->
</SCRIPT>
<br>
Testing Dynamic JavaScript Variables
<br>
<img src="images/logo.gif">
<br>
Image
</body>
</html>

规则

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

重写后的 HTML 页

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

// 会用网关 URL 和 Portal Server URL 重写上面的所有语句。还会适当地在前面加上所需的路径。第一项规则将 dJSVar 的右侧部分确定为一个动态 JavaScript 变量。然后将其传递给第二项规则,后者将 dJSimgsrc 的右侧部分确定为 URL 类型的 JavaScript 变量。并且会相应地对其进行重写。

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

// 由于在 default_gateway_ruleset 中定义了规则 <Attribute name="src"/>,所以会重写该行。

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

JavaScript SYSTEM 变量示例

Procedure使用 JavaScript 系统变量示例

  1. 可从以下位置访问本示例:

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

  2. 将本示例中指定的规则(如果尚不存在)添加到“JavaScript 源重写规则”一节的 default_gateway_ruleset 中。

  3. 在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset

  4. 重新启动网关:


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

重写前的 HTML 页

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

规则

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

重写后的 HTML

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

// 重写器将 window.location.pathname 确定为 JavaScript SYSTEM 变量。无法在服务器端确定该变量的值。因此,重写器会在此变量前加上 psSRAPRewriter_convert_pathname 函数。这个包裹函数将在客户机端确定变量的值,并根据需要进行重写。

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

JavaScript URL 函数示例

Procedure使用 JavaScript URL 函数示例

  1. 可从以下位置访问本示例:

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

  2. 将本示例中指定的规则(如果尚不存在)添加到“JavaScript 源重写规则”一节的 default_gateway_ruleset 中。在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset

  3. 重新启动网关:


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

重写前的 HTML 页

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

规则

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

重写后的 HTML 页

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

JavaScript EXPRESSION 函数示例

Procedure使用 JavaScript 表达式函数示例

  1. 可从以下位置访问本示例:

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

  2. 将本示例中指定的规则(如果尚不存在)添加到“JavaScript 源重写规则”一节的 default_gateway_ruleset 中。

  3. 使用 Portal Server 管理控制台编辑重写器服务中的 default_gateway_ruleset

  4. 重新启动网关:


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

重写前的 HTML 页

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

规则

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

重写后的 HTML 页

<html>
<body>
JavaScript EXPRESSION Function Test Page
<br><br><br>
<script>
<!--
// various functions including psSRAPRewriter_
convert_expression appear here.//-->
</SCRIPT>
<script language="JavaScript">
<!--
function jstest2()
{
return ".html";
}
function jstest1(one)
{
return one;
}
var dir="/images/test"
var test1=jstest1(psSRAPRewriter_convert_
expression(dir+"/test"+jstest2()));

// 此规则规定需要重写函数 jstest1 中类型为 EXPRESSION 的第一个参数。该表达式的值是 /test/images/test.html。会在该值前面加上 Portal Server URL 和“网关 URL”。

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

JavaScript DHTML 函数示例

Procedure使用 JavaScript DHTML 函数示例

  1. 可从以下位置访问本示例:

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

  2. 将本示例中指定的规则(如果尚不存在)添加到“JavaScript 源重写规则”一节的 default_gateway_ruleset 中。

  3. 在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset

  4. 重新启动网关:


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

重写前的 HTML 页

<html>
<head>
Testing JavaScript DHTML Functions
<br>
<br>
<script>
<!--
document.write(\q<a href="/index.html">write</a><BR>\q)
document.writeln(\q<a href="index.html">writeln</a><BR>\q)
document.write("http://abc.sesta.com/index.html<BR>")
document.writeln("http://abc.sesta.com/index.html<BR>")
//-->
</SCRIPT>
</head>
<body BGCOLOR=white>
<br><br>
Testing document.write and document.writeln
</body>
</html>

规则

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

重写后的 HTML 页

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

// 第一项规则指定需要重写 DHTML JavaScript 函数 document.write 的第一个参数。重写器将第一个参数确定为一个简单 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 的第一个参数。重写器将第一个参数确定为一个简单 HTML 语句。default_gateway_ruleset 中的 HTML 规则部分具有规则 <Attribute name="href" />,该规则指示需要重写该语句。

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

// 虽然此 DHTML 规则确定出了 document.writedocument.writeln 函数,但是不会重写上述语句。这是因为本例中的第一个参数不是简单 HTML。它可以是任意的字符串,因而重写器不知道该如何重写这个参数。

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

JavaScript DJS 函数示例

Procedure使用 JavaScript DJS 函数示例

  1. 可从以下位置访问本示例:

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

  2. 确保在网关服务的“域和子域的代理”列表中定义了 abc.sesta.com

    如果没有定义该项,则假定采用直接连接,不会在其前面加网关 URL。

  3. 将本示例中指定的规则(如果尚不存在)添加到“JavaScript 源重写规则”一节的 default_gateway_ruleset 中。在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset

  4. 重新启动网关:


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

重写前的 HTML 页

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

规则

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

重写后的 HTML 页

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

// abc.sesta.com 是网关服务的“域和子域的代理”列表中的一项。因此重写器需要重写这个 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 的第二个参数,但在本语句中不会发生这种情况。这是因为重写器不会将第二个参数识别为简单 HTML。

</script>
</html>

XML 属性示例

Procedure使用 XML 属性示例

  1. 可从以下位置访问本示例:

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

  2. 将本示例中指定的规则(如果尚不存在)添加到“XML 源重写规则”一节的 default_gateway_ruleset 中。

  3. 在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset

  4. 重新启动网关:


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

重写前的 XML

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

规则

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

重写后的 HTML

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

// 由于本语句符合规则中指定的条件,所以会重写它。Attribute namehreftagcheckvaluePatterns1234。将会重写 valuePatterns 后的字符串。有关 valuePatterns 的详细信息,参见在规则中使用模式匹配

</body>
Rewriting ends
</html>

实例研究

本节包括一个邮件客户机示例的源 HTML 页。本实例研究并未涵盖所有可能的方案和规则。它只是一个规则集示例,目的是为了帮助您将自己内联网页的相应规则合在一起。

假设

本实例研究作了如下假设:

示例页 1

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

描述

描述 展示了示例规则集与实例研究之间的映射。

表 4–3 示例规则集与实例研究之间的映射

页内容 

应用的规则 

重写器输出 

描述 

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

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

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

g_szVirtualRoot 是一个值为简单 URL 的变量。

该规则通知重写器搜索 URL 类型的变量 g_szVirtualRoot。如果网页中存在这样的变量,重写器会将其转换成绝对 URL,并在其前加上网关 URL。

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

<Attribute name="src" /> 

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

src 是属性的名称,它没有附带任何标记或 valuePattern。 

该规则通知重写器搜索所有具有名称 src 的属性,并重写该属性的值。

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

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

<Attribute name="href"/>

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

href 是属性的名称,它没有附带任何标记或 valuePattern。 

该规则通知重写器搜索所有具有名称 href 的属性,并重写该属性的值。


注 –

规则集应用优先顺序为 hostname-subdomain-domain

例如,假定在基于域的规则集列表中有下列条目:

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

ruleset3 将应用于 host1 上的所有页。

除了从 host1 中检索到的页之外,ruleset2 将应用于 eng 子域中的所有页。

除了从 eng 子域和 host1 中检索到的页之外,ruleset1 将应用于 sesta.com 域中的所有页。


  1. 单击“保存”以完成修改。

  2. 从终端窗口中重新启动网关:


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

Outlook Web Access 规则集

Secure Remote Access 服务器支持 Sun Java System Web Server 及 IBM 应用服务器上 Outlook Web Access (OWA) 的 MS Exchange 2000 SP3 安装和 MS Exchange 2003 安装。

Procedure配置 OWA 规则集

  1. 以管理员身份登录到 Portal Server 管理控制台。

  2. 选择“Secure Remote Access”选项卡,然后选择想要为其设置属性的网关配置文件。

  3. 在“将 URI 映射至规则集”字段中,输入安装了 Exchange 2000 的服务器名称,紧接着为 Exchange 2000 Service Pack 4 OWA 规则集。

    例如:


    exchange.domain.com|exchange_2000sp3_owa_ruleset。

使用公共文件夹

在 Exchange 端,“公共文件夹”被配置为使用 NTLM 验证。在此,需要将其更改为使用 HTTP 基本验证。

要执行此操作,转到 Exchange 服务器并选择“控制面板”-->“管理工具”,然后打开“Internet 信息服务”。

在“默认 Web 站点”下,有一个名为“公共”的选项卡,用于设置公共文件夹。单击鼠标右键并选择“属性”。单击“目录安全”选项卡。在“匿名访问和验证”控制面板中选择“编辑..”。取消选中除“基本验证”之外的所有其他选项。

6.x 与 3.0 的规则集映射

下表列出了 Secure Remote Access 服务器重写器规则与 Portal Server 产品先前版本的映射。

表 4–4 与 SP3 的规则映射

Rewriter 6.0 DTD 元素 

Rewriter 3.0 列表框名称 

HTML 内容规则

 

属性 - URL 

重写 HTML 属性 

属性 - DJS 

重写包含 JavaScript 的 HTML 属性 

表单 

重写表输入标记列表 

Applet 

重写 Applet/Object 参数值列表 

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 文档的属性值 

TagText 

重写XMl 文档的文本数据 

CSS 内容规则

 

无需任何规则。默认情况下,会转换所有 URL 

 

WML 内容规则

 

未定义任何规则。WML 以 HTML 方式处理,并应用 HTML 规则。 

 

WMLScript 内容规则

 
   

不支持 WML 脚本