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

定义基于语言的规则

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

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>