Secure Remote Access 的重写器组件允许用户利用解析 Web 页面来通过网关访问内联网 Web 页面。
本章包括以下主题:
借助 Secure Remote Access 的重写器组件,最终用户可以浏览内联网,方法是修改 Web 页上引用的“统一资源标识符”(Uniform Resource Identifier, URI),以使其指向网关。URI 定义了一种在任何注册名称空间中封装名称的方法,并用名称空间对名称进行标记。最常用的 URI 类型为统一资源定位符 (Uniform Resource Locators, URL)。重写器仅支持 HTTP 或 HTTPS。此支持与协议的大小写无关。重写器仅支持出现在相对 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 和网关使用。
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:
<?xml version="1.0" encoding="UTF-8"?> <!-- The following constraints are not represented in DTD, but taken care of programmatically 1. In a Rule, All Mandatory attributes cannot be "*". 2. Only one instance of the below elements is allowed, but in any order. 1)HTMLRules 2)JSRules 3)XMLRules 3. ID should always be in lower case. --> <!ENTITY % eURL ’URL’> <!ENTITY % eEXPRESSION ’EXPRESSION’> <!ENTITY % eDHTML ’DHTML’> <!ENTITY % eDJS ’DJS’> <!ENTITY % eSYSTEM ’SYSTEM’> <!ENTITY % ruleSetElements ’(HTMLRules | JSRules | XMLRules)?’> <!ENTITY % htmlElements ’(Form | Applet | Attribute)*’> <!ENTITY % jsElements ’(Variable | Function)*’> <!ENTITY % xmlElements ’(Attribute | TagText)*’> <!ELEMENT RuleSet (%ruleSetElements;,%ruleSetElements;,%ruleSetElements;)> <!ATTLIST RuleSet id ID #REQUIRED extends CDATA "none" > <!-- Rules for identifying rules in HTML content --> <!ELEMENT HTMLRules (%htmlElements;)> <!ELEMENT Form EMPTY> <!ATTLIST Form name CDATA #REQUIRED field CDATA #REQUIRED valuePatterns CDATA "" source CDATA "*" > <!ELEMENT Applet EMPTY> <!ATTLIST Applet code CDATA #REQUIRED param CDATA "*" valuePatterns CDATA "" source CDATA "*" > <!-- Rules for identifying rules in JS content --> <!ELEMENT JSRules (%jsElements;)> <!ELEMENT Variable EMPTY> <!ATTLIST Variable name CDATA #REQUIRED type (%eURL; | %eEXPRESSION; | %eDHTML; | %eDJS; | %eSYSTEM;) "EXPRESSION" source CDATA "*" > <!ELEMENT Function EMPTY> <!ATTLIST Function name CDATA #REQUIRED paramPatterns CDATA #REQUIRED type (%eURL; | %eEXPRESSION; | %eDHTML; | %eDJS;) "EXPRESSION" source CDATA "*" > <!-- Rules for identifying rules in XML content --> <!ELEMENT XMLRules (%xmlElements;)> <!ELEMENT TagText EMPTY> <!ATTLIST TagText tag CDATA #REQUIRED attributePatterns CDATA "" source CDATA "*" > <!ELEMENT Attribute EMPTY> <!ATTLIST Attribute name CDATA #REQUIRED tag CDATA "*" valuePatterns CDATA "" type (%eURL; | %eDHTML; | %eDJS; ) "URL" source CDATA "*" >
除必需的属性值不能只为 * 以外,您可以使用 * 作为规则值的一部分。此类规则会被忽略,但会将消息记录在 RuleSetInfo 日志文件中。有关该日志文件的信息,参见调试文件名称。
本节包含一个示例规则集。第 140 页的“案例研究”用于举例说明重写器是如何解释这些规则的。
<?xml version="1.0" encoding="ISO-8859-1"?> <!-- Rules for integrating a mail client with the gateway. --> <!DOCTYPE RuleSet SYSTEM "jar://rewriter.jar/resources/RuleSet.dtd"> <RuleSet type="GROUPED" id="owa"> <HTMLRules> <Attribute name="action" /> <Attribute name="background" /> <Attribute name="codebase" /> <Attribute name="href" /> <Attribute name="src" /> <Attribute name="lowsrc" /> <Attribute name="imagePath" /> <Attribute name="viewClass" /> <Attribute name="emptyURL" /> <Attribute name="draftsURL" /> <Attribute name="folderURL" /> <Attribute name="prevMonthImage" /> <Attribute name="nextMonthImage" /> <Attribute name="style" /> <Attribute name="content" tag="meta" /> </HTMLRules> <JSRules> <!-- Rules for Rewriting JavaScript variables in URLs --> <Variable name="URL"> _fr.location </Variable> <Variable name="URL"> g_szUserBase </Variable> <Variable name="URL"> g_szPublicFolderUrl </Variable> <Variable name="URL"> g_szExWebDir </Variable> <Variable name="URL"> g_szViewClassURL </Variable> <Variable name="URL"> g_szVirtualRoot </Variable> <Variable name="URL"> g_szBaseURL </Variable> <Variable name="URL"> g_szURL </Variable> <Function name="EXPRESSION" name="NavigateTo" paramPatterns="y"/> </JSRules> <XMLRules> <Attribute name="xmlns"/> <Attribute name="href" tag="a"/> <TagText tag="baseroot" /> <TagText tag="prop2" /> <TagText tag="prop1" /> <TagText tag="img" /> <TagText tag="xsl:attribute" attributePatterns="name=src" /> </XMLRules> </RuleSet>
编写规则的一般程序为:
确定哪些目录包含内容需重写的 HTML 页。
在这些目录中,确定需重写的页。
确定各页需重写的 URL。确定大多数 URL 的简便方法是搜索“http”和“/”。
确定 URL 的内容类型:HTML、JavaScript 或 XML。
编写上述各 URL 所需的重写规则,这可通过在 Access Manager 管理控制台的 Portal Server 配置下编辑重写器服务中的必需规则集来完成。
将所有规则合并到该域的规则集中。
当创建规则集时,请谨记以下内容:
特定主机的优先顺序以匹配最长的 URL 为基础。例如,对于以下规则集
mail1.central.abc.com|iplanet_mail_ruleset *.sfbay.abc.com|sfbay_ruleset *.abc.com|generic_ruleset
由于 sfbay_ruleset 匹配最长,因此使用它。
规则集中的规则会依次应用于页面中的每条语句,直到有一项规则与某条语句相匹配为止。
编写规则时,切记不要忘了规则的顺序。规则是按它们在规则集中的出现顺序应用于页中的语句的。如果既有特定规则又有包含 "*" 的一般规则,要先定义特定规则,然后再定义一般规则。否则,一般规则将先于特定规则应用于所有语句。
所有规则都需要包括在 <RuleSet> </RuleSet> 标记内。
在规则集的 <HTMLRules> </HTMLRules> 部分加入需要重写 HTML 内容的所有规则。
在规则集的 <JSRules> </JSRules> 部分加入需要重写 JavaScript 内容的所有规则。
在规则集的 <XMLRules> </XMLRules> 部分加入需要重写 XML 内容的所有规则。
在内联网页中,确定需要重写的 URL,并在规则集的适当部分(HTML、JSRules 或 XMLRules)加入所需规则。
将规则集分配给所需的域。
重新启动网关以使所有更改生效:
gateway-install-root/SUNWportal/bin/gateway -n gateway-profile-name start
规则集根元素有两个属性:
RuleSetName,例如,default_ruleset。在规则集到 URI 的映射中会引用此名称。
Extends。该属性是指规则集的继承功能。该值指向您希望从中派生出规则集的规则集。
可使用值 none 表示这个新的独立规则集不依赖于其他任何规则集,或者指定 RuleSetName 表示您的规则集依赖于另一规则集。
重写器使用递归功能对同一模式进行搜索,直到匹配字符串模式的末尾。
例如,重写器解析以下字符串时:
<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
JavaScript
XML
网页中的 HTML 内容可进一步分成属性、表单和 applet。相应地,HTML 内容规则分为以下几类:
该规则用于确定标记都有哪些属性的值需要重写。属性值可以是简单 URL,也可以是 JavaScript 或 DHTML 内容。例如:
"img" 标记中指向某个图像位置的 src 属性(简单 URL)
href 属性中用于处理链接单击操作的 onClick 属性 (DJS)
本节说明以下内容:
<Attribute name="attributeName" [tag="*" valuePatterns="" source="*" type="URL|DHTML|DJS"]/>
其中:
attributeName 是属性的名称(强制项)
tag 是属性所属的标记(可选项,默认值是 *,指任何标记)
valuePatterns 参见在规则中使用模式匹配
source 指定在其中定义该属性的页的 URI(可选项,默认值是 *,指在任何页中)
type 指定值的类型(可选项)。它们可以是:
URL - 简单 URL(默认值)。
DHMTL - DHTML 内容。这种内容以标准 HTML 内容的形式显示,并且用于 Microsoft HTC 格式文件。
DJS - JavaScript 内容。所有 HTML 事件处理程序(如 onClick 和 onMouseover)都用此 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。最后一个需要重写的字段不必用 ** 指出。 |
JavaScript 可以在各种不同位置包含 URL。重写器不能直接解析 JavaScript 并确定出 URL 部分。需要编写一组特殊的规则来帮助 JavaScript 处理器确定和转换 URL。
具有 URL 类型的 JavaScript 元素分类如下:
<Variable name="variableName" [type="URL|EXPRESSION|DHTML|DJS|SYSTEM" source="*"]>
根据 JavaScript 变量所含值的类型,可将它们细分为以下 5 类:
变量值为可作为 URL 对待的简单字符串。
本节分为下列各小部分:
<Variable name="variableName" type="URL" [source="*"]>
其中
variableName 是变量的名称。variableName 的值会被重写(强制项)
type 是 URL 变量(强制项,其值必须是 URL)
source 是该 JavaScript 变量所在页的 URI(可选项,默认值是 *,指在任何页中)
假定基 URL 为:
http://abc.siroe.com/tmp/page.html
页内容
<script LANGUAGE="Javascript"> <!-- //URL Variables var imgsrc1="/tmp/tmp.jpg"; var imgsrc2="http://srap.sesta.com/tmp/tmp.jpg"; var imgsrc3=imgsrc2; //--> </SCRIPT>
规则
<Variable name="imgsrc*" type="URL"/>
输出
<script LANGUAGE="Javascript"> <!-- //URL Variables var imgsrc="gateway-URL/http://abc.siroe.com/tmp/tmp.jpg"; var imgsrc="gateway-URL/http://srap.sesta.com/tmp/tmp.jpg"; var imgsrc3=imgsrc2; //--> </SCRIPT>
描述
会重写 URL 类型并且名称以 imgsrc 开头的所有变量。对于输出中的第一行,在其前面加上了网关 URL 以及变量所在页的基 URL。第二行已包含绝对路径,因此只在其前面加上了网关 URL。由于第三个 var imagsrc2 的值不是字符串,而是其他 JavaScript 值,所以不会对其进行重写。
表达式变量的右侧是一个表达式。该表达式的结果是一个 URL。由于重写器无法对服务器上的此类表达式求值,所以它会向 HTML 页追加一个 JavaScript 函数 (psSRAPRewriter_convert_expression)。该函数将此表达式视为一个参数,并在客户机浏览器中对其进行求值以得出所需的 URL。
如果不确定语句中包含的是简单 URL 还是 EXPRESSION URL,则使用 EXPRESSION 规则,因为它可以处理这两种情形。
本节分为下列各小部分:
<Variable name="variableName" [type="EXPRESSION" source="*"]/>
其中
variableName 是值为表达式的 JavaScript 变量的名称(强制项)
type 是 JavaScript 变量的类型(可选项,默认值是 EXPRESSION)
source 是页的 URI(可选项,默认值是 *,指任何源)
假定页的基 URL 为:
http://abc.siroe.com/dir1/dir2/page.html
页内容
<script LANGUAGE="Javascript"> <!-- //Expression variables var expvar= getURIPreFix() + "../../images/graphics"+".gif"; document.write("<A HREF="+expvar+">Link to XYZ content</A><P>") var expvar="../../images/graphics"+".gif"; //--> </SCRIPT>
规则
<Variable name="expvar" type="EXPRESSION"/> 或 <Variable name="expvar"/>
输出
var expvar=psSRAPRewriter_convert_expression(getURIPreFix() + "../../images/graphics"+".gif");document.write("<a href="+expvar+">> Link to XYZ content</A><P>")var expvar="gateway-URL/http://abc.siroe.com/images/graphics"+".gif";
描述
会在第一行的表达式变量 expvar 右侧的前面加上函数 psSRAPRewriter_convert_expression。该函数会在运行时处理此表达式并重写相应内容。在第三行中,值被重写为一个简单的 URL。
这些变量是包含 HTML 内容的 JavaScript 变量。
本节分为下列各小部分:
<Variable name="variableName" type="DHTML" [source="*"]/>
其中
variableName 是具有 DHTML 内容的 JavaScript 变量的名称(强制项)
type 是变量的类型(强制项,其值必须是 DHTML)
source 是页的 URL(可选项,默认值是 *,指在任何页中)
假定页的基 URL 为:
http://abc.sesta.com/graphics/set1/ graphics/jsscript/JSVAR/page.html
页内容
<script LANGUAGE="Javascript"> <!-- //DHTML Var var dhtmlVar="<a href=../../images/test.html>" var dhtmlVar="<a href=/images/test.html>" var dhtmlVar="<a href=images/test.html>" //--> </SCRIPT>
规则
<Variable name="dhtmlVar" type="DHTML"/> <Attribute name="href"/> 或 <Attribute name="href" tag="a"/>
输出
<script LANGUAGE="Javascript"> <!-- //DHTML Var var dhtmlVar="<a href=gateway-URL /http://abc.sesta.com/graphics/ set1/graphics/images/test.html>" var dhtmlVar="<a href=gateway-URL/ http ://abc.sesta.com/images/test.html>" var dhtmlVar="<a href=gateway-URL/ http://abc.sesta.com/graphics/set1/ graphics/jscript/JSVAR/images/test.html>" //--></SCRIPT>
描述
JavaScript 解析器会将 dhtmlVar 的值作为 HTML 内容读取,并通过 HTML 解析器发送此内容。HTML 解析器会应用其中有 href 属性规则匹配的 HTML 规则,因此 URL 会被重写。
这些变量是包含 JavaScript 内容的 JavaScript 变量。
本节分为下列各小部分:
<Variable name="variableName" type="DJS" [source="*"]/>
其中
variable 是值为 javascript 的 JavaScript 变量。
假定页的基 URL 为:
http://abc.sesta.com/dir1/dir2/dir3/jscript/dir4/page.html
页内容
//DJS Var var dJSVar="var dJSimgsrc=\q/tmp/tmp.jpg\q;" var dJSVar="var dJSimgsrc=\q../tmp/tmp.jpg\q;" var dJSVar="var dJSimgsrc= \qhttp://abc.sesta.com/tmp/tmp.jpg\q;"
规则
<Variable name="DJS">dJSVar/> <Variable name="URL">dJSimgsrc/>
输出
//DJS Var - need 2 rules var dJSVar="var dJSimgsrc=\qgateway-URL /http://abc.sesta.com/tmp/tmp.jpg\q;"var dJSVar="var dJSimgsrc=\q gateway-URL/http ://abc.sesta.com/dir1/dir2/dir3/jscript/tmp/tmp.jpg\q;" var dJSVar="var dJSimgsrc=\qgateway-URL/ http://abc.sesta.com/tmp/tmp.jpg\q;"
描述
这里需要两项规则。第一项规则用于查找动态 JavaScript 变量 dJSVar。该变量的值同样是 URL 类型的 JavaScript。第二项规则用于重写该 JavaScript 变量的值。
这些变量是指不是由用户声明且只得到有限支持的变量。它们可用作 JavaScript 标准的一部分。例如,window.location.pathname。
本节分为下列各小部分:
<Variable name="variableName" type="SYSTEM" [source="*"]/>
其中
variableName 是 JavaScript 系统变量(强制项,其值可以是与以下模式匹配的任何值:document.URL、document.domain、location、doument.location、location.pathname、location.href、location.protocol、location.hostname、location.host 和 location.port。上述所有模式都存在于 generic_ruleset 中。不要修改这些系统变量规则。)
type 指定系统类型值(强制项,且值为 DJS)
source 是此页的 URI(可选项,默认值是 *,指在任何页中)
假定页的基 URL 为:
http://abc.siroe.com/dir1/page.html
页内容
<script LANGUAGE="Javascript"> <!-- //SYSTEM Var alert(window.location.pathname); //--> </SCRIPT>
规则
<Variable name="window.location.pathname" type="SYSTEM"/>
输出
</SCRIPT> <SCRIPT LANGUAGE="Javascript"> <!-- //SYSTEM Var alert(psSRAPRewriter_convert_pathname(window.location.pathname)); //--> </SCRIPT>
描述
重写器会查找与规则匹配的系统变量,然后在其前面加上 psSRAPRewriter_convert_system 函数。该函数会在运行时处理此系统变量并相应地重写最终得到的 URL。
值需重写的函数参数分为以下 4 类:
<Function name="functionName " paramPatterns="y,y," [type="URL|EXPRESSION|DHTML|DJS" source="*"]/>
其中
name 是 JavaScript 函数的名称(强制项)
paramPatterns 指定需要重写的参数(强制项)
y y 的位置指示需要重写的参数。例如,在语法中,第一个参数需要重写,但不能重写第二个参数
type 指定该参数所需值的类型(可选项,默认值是 EXPRESSION 类型)
source 是页的源 URI(可选项,默认值是 *,指在任何页中)
函数将该参数视为一个字符串并且该字符串可以作为 URL 对待。
本节分为下列各小部分:
<Function name="functionName" paramPatterns="y,," type="URL" [source="*"]/>
其中
name 是具有 URL 类型参数的函数的名称(强制项)
paramPatterns 指定需要重写的参数(强制项)
y y 的位置指示需要重写的参数。例如,在语法中,第一个参数需要重写,但不能重写第二个参数
type 是函数的类型(强制项,其值必须是 URL)
source 是具有该函数调用的页的 URL(可选项,默认值是 *,指在任何 URL 中)
假定页的基 URL 为:
http://abc.sesta.com/test/rewriter/test1/jscript/test2/page.html
页内容
<script language="JavaScript"> <!-- function test(one,two,three){ alert(one + "##" + two + "##" +three); } test("/test.html","../test.html","123"); window.open("/index.html","gen",width=500,height=500); //--> </SCRIPT>
规则
<Function name="URL" name="test" paramPatterns="y,y,"/> <Function name="URL" name="window.open" paramPatterns="y,,,"/>
输出
<SCRIPT language="JavaScript"> <!-- function test(one,two,three) { alert(one + "##" + two + "##" +three); } test("gateway-URL/http://abc.sesta.com/test.html"," gateway-URL/http://abc.sesta.com/test/rewriter/ test1/jscript/test.html","123");window.open("gateway-URL/ http://abc.sesta.com/index.html","gen",width=500,height=500); //--> </SCRIPT>
描述
第一项规则指定需要重写名为 test 的函数中的前两个参数。因此会重写 test 函数的前两个参数。第二项规则指定需要重写 window.open 函数的第一个参数。会在 window.open 函数中的 URL 前面加上网关 URL 以及包含函数参数的页的基 URL。
这些参数接受表达式值,表达式计算结果为 URL。
本节分为下列各小部分:
<Function name="functionName" paramPatterns="y" [type="EXPRESSION" source="*"]/>
其中
name 是函数的名称(强制项)
paramPatterns 指定需要重写的参数(强制项)
y y 的位置指示需要重写的函数参数。在上述语法中,只会重写第一个参数
type 指定 EXPRESSION 值(可选项)
source 是其中调用了该函数的页的 URI
假定页的基 URL 为:
http://abc.sesta.com/dir1/dir2/page.html
页内容
<script language="JavaScript"> <!-- function jstest2(){ return ".html"; } function jstest1(one){ return one; } var dir="/images/test" var test1=jstest1(dir+"/test"+jstest2()); document.write("<a HREF="+test1+">TEST</a>"); alert(test1); //--> </SCRIPT>
规则
<Function type="EXPRESSION" name="jstest1" paramPatterns="y"/> 或 <Function name="jstest1" paramPatterns="y"/>
输出
<script language="JavaScript"> <!-- function jstest2(){ return ".html"; } function jstest1(one){ return one; } var dir="/images/test" var test1=jstest1(psSRAPRewriter_convert_expression(dir+"/test"+jstest2())); document.write("<a HREF="+test1+">TEST</a>"); alert(test1); //--> </SCRIPT>
描述
此规则将 jstest1 函数的第一个参数视为 EXPRESSION 函数参数,以此来指定需要重写该参数。在示例页内容中,第一个参数是一个表达式,只会在运行时对其进行求值。重写器会在该表达式前加上 psSRAPRewriter_convert_expression 函数。此表达式要进行求值,并且 psSRAPRewriter_convert_expression 函数会在运行时重写输出结果。
在上述示例中,不需要在 JavaScript 变量规则中包含 test1。jstest1 的函数规则会负责执行重写工作。
值为 HTML 的函数参数
本机 JavaScript 方法(如可动态生成 HTML 页的 document.write())归属于这一类别。
本节分为下列各小部分:
<Function name="functionName" paramPatterns="y" type="DHTML" [source="*"]/>
其中
name 是函数的名称
paramPatterns 指定需要重写的参数(强制项)
y y 的位置指示需要重写的函数参数。在上述语法中,只会重写第一个参数
假定页的基 URL 为:
http://xyz.siroe.com/test/rewriter/test1/jscript/JSFUNC/page.html
页内容
<script> <!-- document.write(\q<a href="/index.html">write</a><BR>\q) document.writeln(\q<a href="index.html">writeln</a><BR>\q) document.write("http://abc.sesta.com/index.html<BR>") document.writeln("http://abc.sesta.com/index.html<BR>") //--> </SCRIPT>
规则
<Function name="DHTML" name="document.write" paramPatterns="y"/> <Function name="DHTML" name="document.writeln" paramPatterns="y"/> <Attribute name="href"/>
输出
<SCRIPT> <!-- document.write(\q<a href="gateway-URL/ http://xyz.siroe.com/index.html">write</a><BR>\q) document.writeln(\q<a href="gateway-URL/ http://xyz.siroe.com/test/rewriter/test1/ jscript/JSFUNC/index.html">writeln</a><BR>\q) document.write("http://abc.sesta.com/index.html<BR>") document.writeln("http://abc.sesta.com/index.html<BR>") //--> </SCRIPT>
描述
第一项规则指定需要重写函数 document.write 中的第一个参数。第二项规则指定需要重写函数 document.writeln 中的第一个参数。第三项规则是一项简单的 HTML 规则,它指定需要重写名为 href 的所有属性。在示例中,DHTML 参数规则将会确定函数中需要重写的参数。然后会应用 HTML 属性规则来实际重写已确定的参数。
值为 JavaScript 的函数参数。
本节分为下列各小部分:
<Function name="functionName" paramPatterns="y" type="DJS" [source="*"]/>
其中
name 是含有一个参数 DJS 的函数的名称(强制项)
paramPatterns 指定上述函数中的哪个参数是 DJS(强制项)
y y 的位置指示需要重写的函数参数。在上述语法中,只会重写第一个参数
type 为 DJS(强制项)
source 是页的 URI(可选项,默认值为 *,指任何 URI)
假定页的基 URL 为:
http://abc.sesta.com/page.html
页内容
<script> menu.addItem(new NavBarMenuItem("All Available Information","JavaScript:top.location=\qhttp://abc.sesta.com\q")); </script>
规则
<Function name="DJS" name="NavBarMenuItem" paramPatterns=",y"/> <Variable name="URL">top.location</Variable>
输出
<script> menu.addItem(new NavBarMenuItem("All Available Information", "JavaScript:top.location=\qgateway-URL/ http://abc.sesta.com\q")); </script>
描述
第一项规则指定需要重写函数 NavBarMenuItem 中的第二个包含 JavaScript 的参数。在 JavaScript 中,变量 top.location 也需要重写。该变量是使用第二项规则来重写的。
网页可以包含 XML 内容,而后者又可以包含 URL。需要重写的 XML 内容分为以下两类:
本规则用于重写标记元素的 PCDATA 或 CDATA。
本节分为下列各小部分:
<TagText tag="tagName" [attributePatterns="attribute_patterns_for_ this_tag" source="*"]/>
其中
tagName 是标记的名称
attributePatterns 是与该标记相应的属性及其值模式(可选项,指该标记根本无任何属性)
source 是该 xml 文件的 URI(可选项,默认值是 *,指任何 xml 页)
假定页的基 URL 为:
http://abc.sesta.com/test/rewriter/test1/xml/page.html
页内容
<xml> <Attribute name="src">test.html</attribute> <attribute>abc.html</attribute> </xml>
规则
<TagText tag="attribute" attributePatterns="name=src"/>
输出
<xml> <Attribute name="src">gateway-URL/ http://abc.sesta.com/test/rewriter/test1/ xml/test.html</attribute><attribute>abc.html</attribute> </xml>
描述
页内容的第一行包含属性示例。页内容中的第二行不包含具有属性呼叫名称且属性名称值为 src 的属性,因此不会进行任何重写。要重写该属性,也需要有 <TagText tag="attribute"/>
XML 属性规则与 HTML 的属性规则类似。二者的区别在于,XML 的属性规则区分大小写,而 HTML 属性规则不区分大小写。这同样是因为 XML 中内置了对大小写的敏感性而 HTML 中则没有。
重写器会基于属性名称来转换属性值。
本节分为下列各小部分:
<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 与 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>
要排除重写器故障,需要启用调试日志。
“调试消息”分为以下几类。
错误 – 重写器无法从中恢复的错误。
警告 – 对重写器的功能没有严重影响的警告。重写器能够恢复这类错误,但无法保证是否会造成异常行为。警告中显示的一些消息是为了提供信息。例如,“未重写图像内容”会作为警告消息被记录下来。这很合理,因为不允许重写器重写图像。
消息 – 重写器提供的最高级别的信息。
以根用户身份登录到网关机器并编辑以下文件:
gateway-install-root/SUNWam/config/AMConfig-instance-name.properties |
设置调试级别:
com.iplanet.services.debug.level= |
调试级别为:
error - 只将严重错误记录到调试文件中。出现此类错误时,重写器通常会停止工作。
warning - 记录警告消息。
message - 记录所有调试消息。
off - 不记录任何调试消息。
在 AMConfig-instance-name .properties 文件的以下属性中,为调试文件指定目录:
com.iplanet.services.debug.directory=/var/opt/SUNWam/debug |
其中 /var/opt/SUNWam/debug 是默认调试目录。
从终端窗口中重新启动网关:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
当调试级别设置为 message 时,调试会生成一组文件。调试文件名称列出了重写器文件及其中包含的信息。
表 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;第二部分是使用 portal 或 gateway-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
本节包括:
含有需重写内容的简单 HTML 页
重写内容所需的规则
相应的已重写 HTML 页
这些示例页在 portal-server-URL /rewriter 目录下获得。在应用规则之前可以先浏览页面,然后再通过网关查看含有已重写输出的文件,以了解规则的工作方式。在一些示例中,规则已包含在 default_gateway_ruleset 中。在一些示例中,您可能需要将规则加入到 default_gateway_ruleset 中。这一点会在适当的地方提及。
某些语句以粗体形式出现,表示已对它们进行了重写。
提供了下列示例:
HTML
JavaScript
函数
XML
XML 属性示例
可从以下位置访问本示例:
portal-server-URL /rewriter/HTML/attrib/attribute.html
确保在网关服务的“域和子域的代理”列表中定义了 abc.sesta.com 和 host1.siroe.com。
如果没有定义该项,则假定采用直接连接,不会在其前面加网关 URL。
不需要将本范例中指定的规则添加到 default_gateway_ruleset 中,因为该规则已定义。
<html> Rewriting starts <head> <title>TEST PAGE () </title> </head> ID-htmlattr.1 <br><br> 1.a href <a href="http://abc.sesta.com/images/logo.gif">http://..</a> <br><br> 2. href <a href="https://host1.siroe.com">https://..</a> <br><br> 3. href <a href="../images/logo.gif">../images/</a> <br><br> 4. href <a href="images/logo.gif">images/..</a> <br><br> 5. href <a href="../../images/logo.gif">../../images/</a> <br><br> Rewriting ends </html>
<Attribute name="href"/>
<html> Rewriting starts <head> <title>TEST PAGE () </title> </head> ID-htmlattr.1 <br><br> 1. a href <a href="gateway-URL/http://abc.sesta.com/images/logo.gif">http://..</a> <br>
// 由于已在 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 标志示例
可从以下位置访问本示例:
portal-server-URL /rewriter/HTML/jstokens/JStokens.html
将本示例中指定的规则添加到“JavaScript 源重写规则”一节的 default_gateway_ruleset 中。
在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset。
从终端窗口中重新启动网关:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<html> <head> Rewriting starts <script language="javascript"> function Check(test,ind){ if (ind == \qblur\q) {alert("testing onBlur")} if (ind == \qfocus\q) {alert("testing onFocus")} } </SCRIPT> </head> <body> <form> <input TYPE=TEXT SIZE=20 value=blur onAbort="Check (\q/indexblur.html\q,\qblur\q);return;"> <input TYPE=TEXT SIZE=20 value=blur onBlur="Check (\q/indexblur.html\q,\qblur\q);return;"> <input TYPE=TEXT SIZE=20 value=focus onFocus="Check (\q/focus.html\q,\qfocus\q);return;"> <input TYPE=TEXT SIZE=20 value=focus onChange="Check (\q/focus.html\q,\qfocus\q);return;"> <input TYPE=TEXT SIZE=20 value=focus onClick="Check (\q/focus.html\q,\qblur\q);return;"> <br><br> </form> </body> Rewriting ends </html>
<Attribute name="onClick" type="DJS"/> <Function type="URL" name="Check" paramPatterns="y"/>
<Function name="URL" name="Check" paramPatterns="y"/> 是 JavaScript 函数规则,在 JavaScript 函数示例中对其进行了详细解释。
<html> <head> Rewriting starts <script language="javascript"> function Check(test,ind){ if (ind == \qblur\q) {alert("testing onBlur")} if (ind == \qfocus\q) {alert("testing onFocus")} } </SCRIPT> </head> <body> <form> <input TYPE=TEXT SIZE=20 value=blur onAbort="Check (\qgateway URL/portal-server-URL/indexblur.html\q,\qblur\q);return;"> <input TYPE=TEXT SIZE=20 value=blur onBlur="Check (\qgateway URL/portal-server-URL/indexblur.html\q,\qblur\q);return;"> <input TYPE=TEXT SIZE=20 value=focus onFocus="Check (\qgateway URL/portal-server-URL/focus.html\q,\qfocus\q);return;"> <input TYPE=TEXT SIZE=20 value=focus onChange="Check (\qgateway URL/portal-server-URL/focus.html\q,\qfocus\q);return;"> <input TYPE=TEXT SIZE=20 value=focus onClick="Check (\qgateway URL/portal-server-URL/focus.html\q,\qblur\q);return;">
// 在本示例中所有语句均会被重写,并且在每种情况下都会在前面加上网关 URL 和 Portal Server URL。这是因为在 default_gateway_ruleset 文件中定义了 onAbort、onBlur、onFocus、onChange 和 onClick 的相应规则。重写器会检测 JavaScript 标志,并将其传递给 JavaScript 函数规则以便做进一步处理。示例中所列的第二项规则会通知重写器要重写哪个参数。
</body> <br>
Rewriting ends
</html>
从以下位置访问此示例:
portal-server-URL/rewriter/HTML/forms/formrule.html
确保在网关服务的“域和子域的代理”列表中定义了 abc.sesta.com。
如果没有定义该项,则假定采用直接连接,不会在其前面加网关 URL。
将本示例中指定的规则添加到“HTML 属性重写规则”一节的 default_gateway_ruleset 中。
在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset。
从终端窗口中重新启动网关:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> </head> <body> RW_START <p> <form name="form1" method="Post" action= "http://abc.sesta.com/casestudy/html/form.html"> <input type="hidden" name="name1" value="0|1234|/test.html"> <input type="hidden" name="name3" value="../../html/test.html"> <form name="form2" method="Post" action=" http://abc.sesta.com/testcases/html/form.html"><br> <input type="hidden" name="name1" value="0|1234| ../../html/test.html"></form> RW_END </p> </body> </html>
<Form source="*" name="form1" field="name1" valuePatterns="0|1234|"/>
<HTML> <HEAD> RW_START </HEAD> <BODY> <P> <FORM name=form1 method=POST action="gateway-URL/http://abc.sesta.com/casestudy/html/form.html">
// 由于在 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>
获得 applet 类文件。RewriteURLinApplet.class 文件位于以下位置:
portal-server-URL/rewriter/HTML/applet/appletcode
applet 代码所在页的基 URL 是:
portal-server-URL/rewriter/HTML/applet/rule1.html
将本示例中指定的规则添加到“HTML 属性重写规则”一节的 default_gateway_ruleset 中。
在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset。
重新启动网关:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<html> Rewriting starts <br> <applet codebase=appletcode code=RewriteURLinApplet.class archive=/test> <param name=Test1 value="/index.html"> <param name=Test2 value="../index.html"> <param name=Test3 value="../../index.html"> </applet> Rewriting ends </html>
<Applet source="*/rule1.html" code="RewriteURLinApplet.class" param="Test*" />
<HTML> Rewriting starts <BR> <APPLET codebase=gateway-URL/portal-server-URL /rewriter/HTML/applet/appletcode=RewriteURLinApplet.class archive=/test>
// 由于规则 <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>
可从以下位置访问本示例:
portal-server-URL /rewriter/JavaScript/variables/url/js_urls.html
确保在网关服务的“域和子域的代理”列表中定义了 abc.sesta.com。
如果没有定义该项,则假定采用直接连接,不会在其前面加网关 URL。
将本示例中指定的规则添加到“JavaScript 源重写规则”一节的 default_gateway_ruleset 中。
在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset。
如果添加了此规则,请重新启动网关:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<html> Rewriting starts <head> <title>JavaScript Variable test page</title> </head> <body> <script LANGUAGE="Javascript"> <!-- //URL Variables var imgsrc="/tmp/tmp.jpg"; var imgsrc="./tmp/tmp.jpg"; var imgsrc="../tmp/tmp.jpg"; var imgsrc="../../tmp/tmp.jpg"; var imgsrc="http://abc.sesta.com/tmp/tmp.jpg"; var imgsrc="../../../tmp/tmp.jpg"; var imgsrc="tmp/tmp.jpg"; //--> </SCRIPT> <br> Testing JavaScript variables! <br> <img src="images/logo.gif"> <br> Image </body> <br> Rewriting ends </html>
<Variable name="imgsrc" type="URL"/>
<html> Rewriting starts <head> <title>JavaScript Variable test page</title> </head> <body> <script LANGUAGE="Javascript"> <!-- //URL Variables var imgsrc="gateway-URL/portal-server-URL/tmp/tmp.jpg"; var imgsrc="gateway-URL/portal-server-URL /rewriter/JavaScript/variables/url/tmp/tmp.jpg"; var imgsrc="gateway-URL/portal-server-URL /rewriter/JavaScript/variables/tmp/tmp.jpg"; var imgsrc="gateway-URL/portal-server-URL /rewriter/JavaScript/tmp/tmp.jpg"; var imgsrc="gateway-URL/http://abc.sesta.com/tmp/tmp.jpg"; var imgsrc="gateway-URL/portal-server-URL/rewriter/tmp/tmp.jpg"; var imgsrc="gateway-URL/portal-server-URL /rewriter/JavaScript/variables/url/tmp/tmp.jpg";
// 如规则中指定的那样,所有上述 URL 都是 URL 类型且名称为 imgsrc 的 JavaScript 变量。因此会在它们前面加上网关 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>
可从以下位置访问本示例:
portal-server-URL /rewriter/JavaScript/variables/expr/expr.html
将本示例中指定的规则(如果尚不存在)添加到“JavaScript 源重写规则”一节的 default_gateway_ruleset 中。
在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset。
如果添加了此规则,请重新启动网关:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<html> <head> <title>JavaScript EXPRESSION Variables Test Page</title> </head> <body> <script LANGUAGE="Javascript"> <!-- //Expression variables var expvar1="images"; var expvar2="/logo.gif"; var expvar = expvar1 + expvar2; document.write("<A HREF="+expvar+">EXPRESSION</A><P>") var expvar="/images/logo"+".gif"; document.write("<A HREF="+expvar+">EXPRESSION</A><P>") //--> </SCRIPT> Testing JavaScript EXPRESSION variables </body> </html>
<Variable type="EXPRESSION" name="expvar"/>
<html> <head> <title>JavaScript EXPRESSION Variables Test Page</title> </head> <body> <SCRIPT> // Rewriter appends the wrapper function psSRAPRewriter_convert_expression here </SCRIPT> <script LANGUAGE="Javascript"> <!-- //Expression variables var expvar1="images"; var expvar2="/logo.gif"; var expvar =psSRAPRewriter_convert_expression( expvar1 + expvar2);
// 重写器会将该语句的右侧部分识别为 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>
可从以下位置访问本示例:
portal-server-URL /rewriter/JavaScript/variables/dhtml/dhtml.html
确保在网关服务的“域和子域的代理”列表中定义了 abc.sesta.com。如果没有定义该项,则假定采用直接连接,不会在其前面加网关 URL。
将本示例中指定的规则(如果尚不存在)添加到“JavaScript 源重写规则”一节的 default_gateway_ruleset 中。在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset。
如果添加了此规则,请重新启动网关:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<html> <head> <title>JavaScript DHTML Variable Test Page</title> </head> <body> <script LANGUAGE="Javascript"> <!-- //DHTML Var var dhtmlVar="<a href=../../images/test.html>" var dhtmlVar="<a href=/../images/test.html>" var dhtmlVar="<a href=/images/test.html>" var dhtmlVar="<a href=images/test.html>" var dhtmlVar="<a href=http://abc.sesta.com/images/test.html>" var dhtmlVar="<img src=http://abc.sesta.com/images/test.html>" //--> </SCRIPT> <br><br> Testing DHTML Variables <br><br> <img src="images/logo.gif">IMAGE </body> </html>
<Variable name="DHTML">dhtmlVar</Variable>
<html> <head> <title>JavaScript DHTML Variable Test Page</title> </head> <body> <script LANGUAGE="Javascript"> <!-- //DHTML Var var dhtmlVar="<a href=gateway-URL/portal-server-URL /rewriter/JavaScript/images/test.html>"
// JavaScript DHTML 规则将 dhtmlVar 的右侧部分确定为动态 HTML 内容。因而,会应用 default_gateway_ruleset 文件中的 HTML 规则。动态 HTML 包含 href 属性。default_gateway_ruleset 定义了规则 <Attribute name="href"/>。因此,会重写 href 属性的值。但此 URL 不是绝对的;因此,会用页的基 URL 以及所需子目录来替换这个相对的 URL。接着在其前面加上网关 URL 以得出最终重写后的输出。
var dhtmlVar="<a href=gateway-URL /portal-server-URL/../images/test.html>"
// 虽然附加了页的基 URL,并且在前面加上了网关 URL,但最终得到的 URL 不会起作用。这是因为初始 URL /../images/test.html 是错误的。
var dhtmlVar="<a href=gateway-URL /portal-server-URL/images/test.html>"
// 这里,JavaScript DHTML 规则同样将右侧部分确定为动态 HTML 内容,并将其传递给 HTML 规则。应用 default_gateway_ruleset 中的 HTML 规则 <Attribute name="href"/>,并按所示方式重写该语句。在其前面加上网关 URL 和 Portal Server URL。
var dhtmlVar="<a href=gateway URL/portal-server-URL/ rewriter/JavaScript/variables/dhtml/images/test.html>" var dhtmlVar="<a href=gateway URL/http://abc.sesta.com/images/test.html>" var dhtmlVar="<img src=gateway-URL/ http://abc.sesta.com/images/test.html>"
// JavaScript DHTML 规则会确定出右侧的动态 HTML 内容,并将此语句传递给 HTML 规则。此时会应用 default_gateway_ruleset 中的 <Attribute name="src"/> 规则。由于此 URL 是绝对的,因此只需在其前面加上网关 URL。为重写该 URL,请确保在“域和子域的代理”列表中定义了 abc.sesta.com。
//--> </SCRIPT> <br><br> Testing DHTML Variables <br><br> <img src="gateway-URL/portal-server-URL/ rewriter/JavaScript/variables/dhtml/images/logo.gif">
// 由于在 default_gateway_ruleset 中定义了规则 <Attribute name="src"/>,所以会重写该行。
<br><br> Image </body> </html>
可从以下位置访问本示例:
portal-server-URL /rewriter/JavaScript/variables/djs/djs.html
确保在网关服务的“域和子域的代理”列表中定义了 abc.sesta.com。如果没有定义该项,则假定采用直接连接,不会在其前面加网关 URL。
将本示例中指定的两项规则(如果尚不存在)添加到“JavaScript 源重写规则”一节的 default_gateway_ruleset 中。在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset。
重新启动网关:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<html> <head> <title>Dynamic JavaScript Variable Test Page</title> </head> <body> <script LANGUAGE="Javascript"> <!-- var dJSVar="var dJSimgsrc=\q/tmp/tmp/jpg\q;" var dJSVar="var dJSimgsrc=\q../../../tmp/tmp/jpg\q;" var dJSVar="var dJSimgsrc=\qhttp://abc.sesta.com/tmp/tmp/jpg\q;" //--> </SCRIPT> <br> Testing Dynamic JavaScript Variables <br> <img src="images/logo.gif"> <br> Image </body> </html>
<Variable name="dJSVar" type="DJS"/> <Variable name="dJSimgsrc" type="URL"/>
<html> <head> <title>Dynamic JavaScript Variable Test Page</title> </head> <body> <script LANGUAGE="Javascript"> <!-- var dJSVar="var dJSimgsrc=\qgateway-URL /portal-server-URL/tmp/tmp/jpg\q;" var dJSVar="var dJSimgsrc=\qgateway-URL /portal-server-URL/rewriter/tmp/tmp/jpg\q;" var dJSVar="var dJSimgsrc=\qgateway-URL /http://abc.sesta.com/tmp/tmp/jpg\q;"
// 会用网关 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>
可从以下位置访问本示例:
portal-server-URL /rewriter/JavaScript/variables/system/system.html
将本示例中指定的规则(如果尚不存在)添加到“JavaScript 源重写规则”一节的 default_gateway_ruleset 中。
在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset。
重新启动网关:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<html> <head> <title>JavaScript SYSTEM Variables Test Page</title> </head> <body> <script LANGUAGE="Javascript"> <!-- //SYSTEM Var alert(window.location.pathname); //document.write ("<A HREF="+window.location.pathname+">SYSTEM</A><P>") //--> </SCRIPT> Testing JavaScript SYSTEM Variables <br> This page displays the path where the current page is located when loaded. </body> </html>
<Variable name="window.location.pathname" type="SYSTEM"/>
<html> <head> <title>JavaScript SYSTEM Variables Test Page</title> </head> <body> <SCRIPT> convertsystem function definition... </SCRIPT> <script LANGUAGE="Javascript"> <!-- //SYSTEM Var alert(psSRAPRewriter_convert_system (window.location, window.location.pathname, "window.location"));
// 重写器将 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>
可从以下位置访问本示例:
portal-server-URL /rewriter/JavaScript/functions/url/url.html
将本示例中指定的规则(如果尚不存在)添加到“JavaScript 源重写规则”一节的 default_gateway_ruleset 中。在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset。
重新启动网关:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<html> <body> JavaScript URL Function Test Page <br> <script language="JavaScript"> <!-- function test(one,two,three) { alert(one + "##" + two + "##" +three); } test("/test.html","../test.html","123"); window.open("/index.html","gen",width=500,height=500); //--> </SCRIPT> </body> </html>
<Function type="URL" name="test" paramPatterns="y,y"/> <Function type="URL" name="window.open" paramPatterns="y"/>
<html> <body> JavaScript URL Function Test Page <br> <script language="JavaScript"> <!-- function test(one,two,three) { alert(one + "##" + two + "##" +three); } test("/test.html","../test.html","123"); window.open("gateway-URL/portal-server-URL /index.html","gen",width=500,height=500); //--> </SCRIPT> </body> </html>
可从以下位置访问本示例:
<portal-install-location>/SUNWportal/samples/rewriter
将本示例中指定的规则(如果尚不存在)添加到“JavaScript 源重写规则”一节的 default_gateway_ruleset 中。
使用 Portal Server 管理控制台编辑重写器服务中的 default_gateway_ruleset。
重新启动网关:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<html> <body> JavaScript EXPRESSION Function Test Page <br><br><br> <script language="JavaScript"> <!-- function jstest2() { return ".html"; } function jstest1(one) { return one; } var dir="/images/test" var test1=jstest1(dir+"/test"+jstest2()); document.write("<a HREF="+test1+">Test</a>"); alert(test1); //--> </SCRIPT> </body> </html>
<Function type="EXPRESSION" name="jstest1" paramPatterns="y"/>
<html> <body> JavaScript EXPRESSION Function Test Page <br><br><br> <script> <!-- // various functions including psSRAPRewriter_ convert_expression appear here.//--> </SCRIPT> <script language="JavaScript"> <!-- function jstest2() { return ".html"; } function jstest1(one) { return one; } var dir="/images/test" var test1=jstest1(psSRAPRewriter_convert_ expression(dir+"/test"+jstest2()));
// 此规则规定需要重写函数 jstest1 中类型为 EXPRESSION 的第一个参数。该表达式的值是 /test/images/test.html。会在该值前面加上 Portal Server URL 和“网关 URL”。
document.write("<a HREF="+test1+">Test</a>"); alert(test1); //--> </SCRIPT> </body> </html>
可从以下位置访问本示例:
portal-server-URL /rewriter/JavaScript/functions/dhtml/dhtml.html
将本示例中指定的规则(如果尚不存在)添加到“JavaScript 源重写规则”一节的 default_gateway_ruleset 中。
在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset。
重新启动网关:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<html> <head> Testing JavaScript DHTML Functions <br> <br> <script> <!-- document.write(\q<a href="/index.html">write</a><BR>\q) document.writeln(\q<a href="index.html">writeln</a><BR>\q) document.write("http://abc.sesta.com/index.html<BR>") document.writeln("http://abc.sesta.com/index.html<BR>") //--> </SCRIPT> </head> <body BGCOLOR=white> <br><br> Testing document.write and document.writeln </body> </html>
<Function type="DHTML" name=" document.write" paramPatterns="y"/> <Function type="DHTML" name=" document.writeln" paramPatterns="y"/>
<html> <head> Testing JavaScript DHTML Functions <br> <br> <script> <!-- document.write(\q<a href="gateway-URL /portal-server-URL/index.html">write</a><BR>\q)
// 第一项规则指定需要重写 DHTML JavaScript 函数 document.write 的第一个参数。重写器将第一个参数确定为一个简单 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.write 和 document.writeln 函数,但是不会重写上述语句。这是因为本例中的第一个参数不是简单 HTML。它可以是任意的字符串,因而重写器不知道该如何重写这个参数。
//--> </SCRIPT> </head> <body BGCOLOR=white> <br><br> Testing document.write and document.writeln </body> </html>
可从以下位置访问本示例:
portal-server-URL /rewriter/JavaScript/functions/djs/djs.html
确保在网关服务的“域和子域的代理”列表中定义了 abc.sesta.com。
如果没有定义该项,则假定采用直接连接,不会在其前面加网关 URL。
将本示例中指定的规则(如果尚不存在)添加到“JavaScript 源重写规则”一节的 default_gateway_ruleset 中。在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset。
重新启动网关:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<html> Test for JavaScript DJS Functions <br> <script> menu.addItem(new NavBarMenuItem("All Available Information","JavaScript:top.location=\qhttp://abc.sesta.com\q")); //menu.addItem(new NavBarMenuItem("All Available Information","http://abc.sesta.com")); </script> </html>
<Function type="DJS" name="NavBarMenuItem" paramPatterns=",y"/> <Variable type="URL" name="top.location"/>
<html> Testing JavaScript DJS Functions <br> <script> menu.addItem(new NavBarMenuItem ("All Available Information","javaScript:top.location= \qgateway-URL/http://abc.sesta.com\q"));
// abc.sesta.com 是网关服务的“域和子域的代理”列表中的一项。因此重写器需要重写这个 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>
可从以下位置访问本示例:
portal-server-URL /rewriter/XML/attrib.html
将本示例中指定的规则(如果尚不存在)添加到“XML 源重写规则”一节的 default_gateway_ruleset 中。
在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset。
重新启动网关:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<html> RW_START <body> <xml> <baseroot href="/root.html"/> </xml> <xml> <img href="image.html"/> </xml> <xml> <string href="1234|substring.html"/> </xml> <xml> <check href="1234|string.html"/> </xml> </body> RW_END </html>
<Attribute name="href" tag="check" valuePatterns="1234|"/>
<html> Rewriting starts <br> <br> <body> <xml><baseroot href="/root.html"/></xml> <xml><img href="image.html"/></xml> <xml><string href="1234|substring.html"/></xml> <xml><check href="1234|gateway-URL/portal-server-URL /rewriter/XML/string.html"/></xml>
// 由于本语句符合规则中指定的条件,所以会重写它。Attribute name 是 href,tag 是 check 而 valuePatterns 是 1234。将会重写 valuePatterns 后的字符串。有关 valuePatterns 的详细信息,参见在规则中使用模式匹配。
</body> Rewriting ends </html>
本节包括一个邮件客户机示例的源 HTML 页。本实例研究并未涵盖所有可能的方案和规则。它只是一个规则集示例,目的是为了帮助您将自己内联网页的相应规则合在一起。
本实例研究作了如下假设:
假定邮件客户机的基 URL 为 abc.siroe.com
假定网关 URL 为 gateway.sesta.com
假定网关服务的“域和子域代理”列表中有相关条目
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <!-- saved from url=(0053)http://abc.siroe.com/mailclient/destin/?Cmd=navbar --> <HTML XMLNS:WM><HEAD> <META http-equiv=Content-Type content="text/html; CHARSET=utf-8"> <META http-equiv=Pragma content=no-cache> <META http-equiv=Expires content=0><!--Copyright (c) 2000 Microsoft Corporation. All rights reserved.--><!--CURRENT FILE== "IE5" "WIN32" navbar --> <STYLE>WM\\:DROPMENU { BEHAVIOR: url(http://abc.siroe.com/mailweb/controls/dropmenu.htc) } </STYLE> <LINK href="destin_files/navbar.css" type=text/css rel=stylesheet> <SCRIPT language=javascript> var g_szUserBase= "http://abc.siroe.com/mailclient/destin"+"/"; var g_szFolder= "."; var g_szVirtualRoot= "http://abc.siroe.com/mailweb"; var g_szImagePath= g_szVirtualRoot + "/img/"; </SCRIPT> <SCRIPT src="/destin_files/navbar.js"></SCRIPT> <META content="MSHTML 6.00.2600.0" name=GENERATOR></HEAD> <BODY oncontextmenu=return(event.ctrlKey); onselectstart=return(false); id=outbar_mainbody style="BACKGROUND-COLOR: appworkspace" leftMargin=0 topMargin=0 scroll=no> <TABLE class=nbTableMain id=nbTableMain style="HEIGHT: 100%" cellSpacing=0 cols=1 cellPadding=0 rows="2"> <TBODY> <TR> <TD class=treeBrand> <DIV class=treeOFLOW><IMG style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px" src="/destin_files/logo-ie5.gif" border=0></DIV></TD></TR> <TR height="100%"> <TD> <TABLE class=nbTable cellSpacing=0 cols=1 cellPadding=0 rows="4"> <TBODY> <TR> <TD class=nbFlybar id=show_navbar onkeydown=flybar_keydown() onclick=ToggleTab(this.id) tabIndex=0 noWrap> <DIV class=treeOFLOW>Shortcuts</DIV></TD></TR> <TR style="HEIGHT: 100%"> <TD id=idOutbarpane style="TEXT-ALIGN: center" vAlign=top><A id=inbox href="http://abc.siroe.com/mailclient/destin/Inbox/?Cmd=contents&Page=1" target=viewer alt="Go to inbox"><IMG class=nbImage alt="Go to inbox" src="destin_files/navbar-inbox.gif"></A> <DIV class=nbLabel>Inbox</DIV><BR><A id=calendar href="http://abc.siroe.com/mailclient/destin/Calendar/?Cmd=contents" target=viewer alt="Go to calendar"><IMG class=nbImage alt="Go to calendar" src="destin_files/navbar-calendar.gif"></A> <DIV class=nbLabel>Calendar</DIV><BR><A id=contacts href="http://abc.siroe.com/mailclient/destin/Contacts/?Cmd=contents" target=viewer alt="Go to contacts"><IMG class=nbImage alt="Go to contacts" src="destin_files/navbar-contacts.gif"></A> <DIV class=nbLabel>Contacts</DIV><BR><A id=options href="http://abc.siroe.com/mailclient/destin/?Cmd=options" target=viewer alt="Go to options"><IMG class=nbImage alt="Go to options" src="destin_files/navbar-options.gif"></A> <DIV class=nbLabel>Options</DIV></TD></TR> <TR style="HEIGHT: 1.5em"> <TD class=nbFlybar id=show_folders onkeydown=flybar_keydown() onclick=ToggleTab(this.id) tabIndex=0 noWrap> <DIV class=treeOFLOW>Folders</DIV></TD></TR> <TR> <TD class=nbTreeProgress id=treeProgress style="DISPLAY: none" vAlign=top noWrap><SPAN id=idLoading style="OVERFLOW: hidden">Loading...</SPAN> </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE> </BODY></HTML>
描述 展示了示例规则集与实例研究之间的映射。
表 4–3 示例规则集与实例研究之间的映射
规则集应用优先顺序为 hostname-subdomain-domain。
例如,假定在基于域的规则集列表中有下列条目:
sesta.com|ruleset1 eng.sesta.com|ruleset2 host1.eng.sesta.com|ruleset3
ruleset3 将应用于 host1 上的所有页。
除了从 host1 中检索到的页之外,ruleset2 将应用于 eng 子域中的所有页。
除了从 eng 子域和 host1 中检索到的页之外,ruleset1 将应用于 sesta.com 域中的所有页。
单击“保存”以完成修改。
从终端窗口中重新启动网关:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
Secure Remote Access 服务器支持 Sun Java System Web Server 及 IBM 应用服务器上 Outlook Web Access (OWA) 的 MS Exchange 2000 SP3 安装和 MS Exchange 2003 安装。
以管理员身份登录到 Portal Server 管理控制台。
选择“Secure Remote Access”选项卡,然后选择想要为其设置属性的网关配置文件。
在“将 URI 映射至规则集”字段中,输入安装了 Exchange 2000 的服务器名称,紧接着为 Exchange 2000 Service Pack 4 OWA 规则集。
例如:
exchange.domain.com|exchange_2000sp3_owa_ruleset。 |
在 Exchange 端,“公共文件夹”被配置为使用 NTLM 验证。在此,需要将其更改为使用 HTTP 基本验证。
要执行此操作,转到 Exchange 服务器并选择“控制面板”-->“管理工具”,然后打开“Internet 信息服务”。
在“默认 Web 站点”下,有一个名为“公共”的选项卡,用于设置公共文件夹。单击鼠标右键并选择“属性”。单击“目录安全”选项卡。在“匿名访问和验证”控制面板中选择“编辑..”。取消选中除“基本验证”之外的所有其他选项。
下表列出了 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 脚本 |