网页中的 HTML 内容可进一步分成属性、表单和 applet。相应地,HTML 内容规则分为以下几类:
该规则用于确定标记都有哪些属性的值需要重写。属性值可以是简单 URL,也可以是 JavaScript 或 DHTML 内容。例如:
"img" 标记中指向某个图像位置的 src 属性(简单 URL)
href 属性中用于处理链接单击操作的 onClick 属性 (DJS)
本节说明以下内容:
<Attribute name="attributeName" [tag="*" valuePatterns="" source="*" type="URL|DHTML|DJS"]/>
其中:
attributeName 是属性的名称(强制项)
tag 是属性所属的标记(可选项,默认值是 *,指任何标记)
valuePatterns 参见在规则中使用模式匹配
source 指定在其中定义该属性的页的 URI(可选项,默认值是 *,指在任何页中)
type 指定值的类型(可选项)。它们可以是:
URL - 简单 URL(默认值)。
DHMTL - DHTML 内容。这种内容以标准 HTML 内容的形式显示,并且用于 Microsoft HTC 格式文件。
DJS - JavaScript 内容。所有 HTML 事件处理程序(如 onClick 和 onMouseover)都用此 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。
假定页的基 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 页可能会包含表单。一些表单元素可能会以 URL 作为值。
本节分为下列各小部分:
<Form name="form1" field="visit" [valuePatterns="" source="*"]/>
其中
name 是表单的名称(强制项)
field 是表单中的字段,其中含有需要重写的值(强制项)
valuePatterns 参见在规则中使用模式匹配
source 是该表单定义所在 html 页的 URL(可选项,默认值是 *,指在任何页中)
假定页的基 URL 为:
http://test.siroe.com/testcases/html/form.html
页内容
假定页 URI 是 form.html,并且它位于服务器的根目录下。
<form name=form1 method=POST action= "http://test.siroe.com/testcases/html/form.html"> <input type=hidden name=abc1 value="0|1234|/test.html"> </form>
要重写 form1 中名为 abc1 的隐藏字段值中出现的 /text.html,需要下列规则。
规则
<Form source="*/form.html" name="form1" field="abc1" valuePatterns="0|1234|"/> <Attribute name="action"/>
输出
<FORM name="form1" method="POST" action="gateway-URL/ http://test.siroe.com/testcases/html/form.html"> <input type=hidden name=abc1 value="0|1234|gateway-URL/ http://test.siroe.com/test.html"> </FORM>
描述
action 标记是用某些已定义的 HTML 属性规则进行重写的。
输入标记属性值的 value 的重写方式如输出中所示。将会查找指定的 valuePatterns,并通过在前面加上网关 URL 以及页的基 URL 来重写紧随在匹配的 valuePatterns 之后的所有内容。参见在规则中使用模式匹配。
单个网页可以包含许多 applet,而且每个 applet 可以包含许多参数。重写器将用规则中指定的值与 applet 的 HTML 定义进行匹配,并修改 applet 参数定义中出现的 URL 值。此替换在服务器处执行,用户浏览特定网页时并不会执行。此项规则会确定并重写 applet 以及 HTML 内容对象标记中的参数。
本节分为下列各小部分:
<Applet code="ApplicationClassName/ObjectID " param="parametername" [valuePatterns="" source="*"] />
其中
code 是 applet 或对象类的名称(强制项)
param 是值需要重写的参数的名称(强制项)
valuePatterns 参见在规则中使用模式匹配
source 是包含 applet 定义的页的 URL(可选项,默认值是 *,指在任何页中)
假定页的基 URL 为:
http://abc.siroe.com/casestudy/test/HTML/applet/rule1.html
页面内容:
<applet codebase="appletcode" code="RewriteURLinApplet.class" archive="/test.jar"> <param name=Test1 value="/index.html"> </applet>
规则
<Applet source="*/rule1.html" code= "RewriteURLin*.class" param="Test*"/>
输出
<APPLET codebase="gateway-URL /http://abc.siroe.com/casestudy/test/HTML/ applet/appletcode" code="RewriteURLinApplet.class" archive="/test.jar"><param name="Test1" value=" gateway-URL/http: //abc.siroe.com/index.html"> </APPLET>
描述
由于 <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 后出现的所有内容(可选项,默认值是 "",指需要重写整个值)
可以通过使用反斜杠对专用字符进行转义来指定这些字符。例如:
<Form source="*/source.html " name="form1" field=" visit" [valuePatterns="0|1234| \\;original text|changed text"]/>
您可以使用通配符星号 (*) 字符来实现重写的模式匹配。
不能在 valuePatterns 字段中仅指定一个 *。因为 * 表示与所有文本匹配,所以 valuePattern 后面没有文本。这样,重写器就没有要重写的文本。您必须将 * 与另一字符串连起来使用,例如 *abc。此时,会重写紧随在 *abc 之后的所有内容。
可在规则的任何字段中使用星号 (*) 作为通配符。不过,规则中的所有字段不能全都包含 *。如果所有字段都包含 *,则会忽略该规则。不会显示错误消息。
可以与原始语句中出现的分隔符(分号或逗号)联合使用 * 或 ** 来分隔多个字段。一个星号 (*) 匹配任何不进行重写的字段,而两个星号 (**) 匹配任何需要重写的字段。
在 valuePatterns 中使用通配符列出了 * 通配符的一些用法示例。
表 4–1 * 通配符用法示例
URL |
valuePatterns |
描述 |
---|---|---|
url1, url2, url3, url4 |
valuePatterns = "**, *, **, *" |
由于 ** 指示了要重写的部分,因此会重写 url1 和 url3。 |
XYZABChttp://host1.sesta.com/dir1.html |
valuePatterns = "*ABC" |
仅重写 http://host1.sesta.com/dir1.html 部分。需要重写 *ABC 后的所有内容。 |
"0|dir1|dir2|dir3|dir4|test|url1 |
valuePatterns = "*|*|**|*|**|*|" |
重写 dir2、dir4 和 url1。最后一个需要重写的字段不必用 ** 指出。 |