ISAPI_Rewrite 最全的中文说明介绍

2007-12-13 08:30 来源: http://www.pc9g.net/pw 作者:八神 网友评论 条 浏览次数 7 转入论坛浏览
   
介绍
ISAPI_Rewrite 是一位强有力的正规兵基于表示 URL 操作引擎。 它行动主要象亚帕基印第安人的mod_Rewrite, 但它是 设计特别是为Microsoft Internet Information Server 并且微软安全和加速度服务器2004 年。 如果曾经您 想改变您的网站的URL 计划, 这个产品是为您!

一些ISAPI_Rewrite 的关键好处:

速度
ISAPI_Rewrite 是极端快速和高度可升级的 解答。 它由使用写唯一纯净的C/C++ 代码、Win32 API 和ISAPI 。 它 使用聪明的配置贮藏所机制。 所有工作被完成在一个 演出并且没有递归地请求或可以的所有其它操作 需要久时间。

安全
ISAPI_Rewrite 被设计为操作在被分享 环境。 它可能服务许多个站点如同您有。 ISP 和主持提供者 罐头安全地允许他们的用户配置ISAPI_Rewrite 和是肯定的任何 配置变化将影响唯一地方使用者环境。 ISAPI_Rewrite 能甚而解决许多安全问题, 例如, 阻拦对一些的通入 文件夹或文件附本或创造更加复杂的规则。

力量
ISAPI_Rewrite 的灵活性和力量来形式它 正则表达式自然。 以正则表达式您不需要写a 数以万计检查串。 比较和替换URLs 可能做与a 少量串样式。 如此, ISAPI_Rewrite 可能做无法完成的许多事 使用其它解答可利用为IIS 。 看见 例子 部分对于更多信息。

主要概念
ISAPI_Rewrite 提供一个基于规则的重写的引擎对重写被请求 URLs 正在进行中。 它支持实际上规则的无限的数字和 附上规则的无限的数字适应提供一真正地灵活 并且强有力的URL 操作机制(设置文件大小强迫真正地是 对2Mb 限制防止可能的设置解析天花板) 。 URL 操作 可能取决于测试为HTTP 倒栽跳水, 服务器可变物, 请求URI, 方法 并且客户请求的版本信息。

这个节目经营请求URI (道路信息加上询问串) 并且HTTP 倒栽跳水作为它描述了在RFC 2068 两个在服务器(全球性) 或站点 上下文。 操作的结果可能导致重写, proxying, 改变方向, 或阻拦原始的请求。 例如如果客户请求资源 http://www 。somesite 。com/path/file 。ext?parameter=value ISAPI_Rewrite 将操作零件被标记在红色。 另外ISAPI_Rewrite 能重写, 创造或去除请求的其他HTTP 倒栽跳水。

重写的引擎审阅ruleset 规则由规则(RewriteRule 方针) 。 特殊规则被运用只如果它匹配反对URI 并且所有对应适应(RewriteCond 方针) 比赛反对 他们的测试串。 ISAPI_Rewrite 用途 比赛 算法。 它意味, 样式表示不被搜寻在 串; 它被匹配反对整体输入串。 一种成功的规则应用的结果 被保存在原始的倒栽跳水并且它将是可看见的为随后规则。 规则处理 停止当一个前个规则(改方向, 代理人, 被禁止或规则由L 旗子标记) 被匹配。

重写将导致服务器继续请求处理与新URI 如果它是由客户最初要求。 新URI 可能包括询问 串部分(随后而来的问号) 并且也许指挥对所有文件, 剧本 电话, 节目祈求等。

Proxiing 导致收效的URI 内部对待代理人请求 并且立刻(i.e 。 规则处理中止这里) 被接通的 处理代理人请求的ISAPI 引伸。 您必须确信, 代替串是合法的URI 包括协议、主人, 等。 或代理人 将退回错误。

改变方向将导致服务器送对一个客户的直接反应以改方向 指示(HTTP 反应代码302 与地点倒栽跳水), 提供收效 URI 作为一个新地点。 您能使用(由RFC 必须的绝对链接 2068) 在改变方向指示改请求方向对一个另外主人, 口岸 并且协议。 总改指示起因方向重写引擎停止规则 程序化处理。

规则被处理按出现的顺序在a 配置文件。 ISAPI_Rewrite 处理服务器级(全球性) 规则首先和 然后它处理一个各自的真正站点规则(如果指定) 。 没有 递归请求或随后反转在处理次序(除了明确地引起 圈), 因此您从未将进入一个死循环。

在所有操作在URI ISAPI_Rewrite 保存原始的道路信息和询问串之前 在HTTP 倒栽跳水被命名 X 重写Url. 然后它可能被检索 在ASP 使用请求。ServerVariables("HTTP_X_REWRITE_URL") 别名。

每当您投入了括号在一个正则表达式仿造参考 那些可能被使用在格式串之内(使用$N 句法) 或在其他之内 样式(使用\N 句法) 内部被创造。 这些参考是全球性的为整个 RewriteRule 方向性和对应 RewriteCond 方针。 Submatches 被编号从下来和从左到右 开始从一 RewriteCond 方向性(如果这样的方针存在) 对应于 RewriteRule.

简化规则和加强服务器安全它是 强烈推荐使父母道路失去能力在IIS 设置。

设施
自动设施
您共同地安装ISAPI_Rewrite 由跑设施包裹的当中一个 并且从事巫术师指示。 安装程序将复制文件 并且记数器COM 对象、ISAPI 过滤器和ISAPI 引伸自动。 其它手工步没有要求完成设施。 虽然一些另外的手工步喜欢 文件系统允许配置或注册代理人在IIS 剧本地图也许必需。

手工设施
唯一ISAPI_Rewrite 的充分的版本支持手工设施。 您将需要 下载分明手工设施包裹包含所有必需的文件。 您能安装 所有特点或唯一部份的他们。

最小的设施包括唯一过滤器。 您应该复制 ISAPI_Rewrite 。dll 归档对目标机和登记它 如同ISAPI 过滤器使用IIS MMC snap-in 。 ISAPI_Rewrite 。dll 能是 登记了或全球性地或在一个特殊站点水平(但不是两个) 。 过滤器将设法装载主要配置文件(httpd.ini) 从过滤器DLL 被找出的文件夹。 站点平实配置被装载从网站根。

它并且被推荐登记消息来源dll 提供文本描述 ISAPI_Rewrite 的事件对事件观察者。 这能由发射做被提供 regmsg 。vbs 剧本从的文件夹 RewriteMsg 。dll 将被找出。

使能站点根道路变动的监视登记COM 服务器 mtbnotif 。dll 以命令 regsvr32 mtbnotif 。dll.

代理人模块要求WinHTTP 5 。1 被安装在服务器。 它已经是存在 在窗口服务器2003 年, 在Windows XP 从SP1 和在视窗2000 从SP3 。 安装它在视窗2000 的更加早期的版本并且Windows XP 或在NT4 您能或者 使用自动设施或下载和安装肥皂工具箱3 SDK 从 http://download 。微软。com/download/2/e/0/2.e068.a11-9ef7-45f5-820f-89573d7c4939/soapsdk 。exe. 在窗口服务器2003 年 您应该安置文件 rwhelper 。dll 。明显 在的同样文件夹 rwhelper 。dll 被找出。 不要安装明显文件在其它OSes. 并且, 在窗口2003 您应该创造 并且使能一个网络服务器引伸以一个任意名指向rwhelper 。dll 由一个短的道路名字。 代理人模块的配置被描述在 配置程序 这的部分 手工。

登记ISAPI_Rewrite 用途 ISRWConfig 。exe 公共事业。

已知的局限和问题
Lite 版本局限
Lite 和ISAPI_Rewrite 的充分的版本分享同样重写的引擎 并且原始代码。 但Lite 版本不支持每站点配置 并且所有相对特点。 唯一全球性规则被处理。 另外Lite 版本不包括proxying 的引擎。 以下方针不是 支持在Lite 版本: RewriteProxy, EnableRewrite, DisableRewrite, EnableConfig, DisableConfig, CacheClockRate 。 以下旗子不支持在Lite 版本: P - 代理人。

ISA 版本具体
ISAPI_Rewrite 为ISA 服务器2004 年根据ISAPI_Rewrite 的Lite 版本。 I.e 。 它 和一样归结于ISA 建筑学的Lite 版本有限制(。 它不 支持ISAPI 的子集要求为其它充分的版本特点工作) 。 注意如果您然后有超过一台ISA 服务器在服务器列阵 您必须安装ISAPI_Rewrite 为ISA 2004 年在所有列阵成员。

特别笔记为IIS6
这些特别笔记有关互联网信息服务器6 的新特点。0 (固定入 窗口2003 年服务器) 和局限强加了由那些特点给ISAPI_Rewrite 的功能。

IIS6 的主要区别从它的祖先是一个新处理模型叫做Worker ·Process 隔离(WPI) 方式。 虽然IIS6 能经营在(没有作用在ISAPI_Rewrite 的功能) 的IIS5 兼容性方式下 它的主要好处能达到只在WPI 方式下。

在WPI 方式真正网站甚至单独网应用跑里面应用水池。 并且 各个应用水池由一个或更多服务被隔绝的工作者过程w3wp 。exe 。 它看起来象高隔离方式 在IIS5 但那里存在一个重大区别。 过滤器不运行在inetinfo 里面。exe 过程再。 他们跑里面工作者过程作为通常应用。

它意味, 那里能是唯一过滤器(一个事例的多个事例为各个工作者过程) 。 然而这不是一个问题为ISAPI_Rewrite 。 但如果, 例如, 二种网应用 http://mysite/app1http://mysite/app2 运行用不同的应用水池比 重写URLs 从/app1 对/app2 将被禁止竟管两种应用属于 同样网站http://mysite 。 只改方向或代理人能安全地被使用在这种情况下。 然而, 这个制约从那以后通常没有对ISAPI_Rewrite 用法的任何重大冲击 整体网站在许多情况下包含一种唯一网应用由唯一服务 应用水池。

了解的问题

IIS5 似乎有有HTTPS 反应的问题引起从过滤器。 这能做 老牌HTTPS 改方向失败。 绕过这个问题使新式改方向与
RFStyle 新
方向性。

配置
允许要求跑ISAPI_Rewrite
在Windows NT4 、视窗2000 、Windows XP 和窗口2003 年在IIS5 兼容模式下 过滤器奔跑在inetinfo 。exe 过程在之下 系统帐户。 因而系统帐户应该被给至少对所有ISAPI_Rewrite dlls 的读出存取和 所有httpd 。ini 文件。 我们并且推荐报告系统修改允许在所有文件夹 包含httpd 。ini 文件。 那将允许httpd 的创作。解析。错误文件包含设置 归档分析错误。 另外的允许也许必需为代理人模块。 从它 能跑在合并或高被隔绝的应用方式, IIS 的帐户分享了水池 并且高的隔离水池应该被给读的允许rwhelper 。dll 。 并且这些应该被报告修改允许在系统临时文件夹(通常 C:\Windows\Temp) 。 IWAM_<ComputerName> 被使用为所有水池。 水池帐户能被发现 在对应的COM+ 应用设置在COM+ 管理帮助下MMC snap-in 。

在窗口2003 年在当地IIS 方式下(WPI 方式) 过滤器和代理人运行在w3wp 。exe 工作者处理对应于 应用水池主持特殊网应用。 各个应用水池能被配置 使用它自己的身分。 这能把允许配置变成一项棘手的任务。 但是在一种正确IIS 配置各个半新身分应该是成员 IIS_WPG 小组。 如此, IIS_WPG 小组能被使用分配必需的允许。 至少读允许应该被给所有ISAPI_Rewrite dlls, rwhelper 。dll 。体现和所有httpd 。ini 文件。 并且如果代理人将被使用IIS_WPG 应该被给修改允许在系统临时文件夹(通常 C:\Windows\Temp) 。 我们并且推荐给IIS_WPG 修改允许在目录包含httpd 。ini 文件允许httpd 。解析。错误 归档创作。

代理人模块的配置。
有时代理人模块也许要求手工配置(如果您将看404 个错误何时 然后proxying 它大概是案件被描述这里) 。 它发生当继承链子 ScriptMap metabase 物产是残破的(这是通常发生的一个正常情况 当网站配置手工被修改了) 。 在这种情况下剧本映射要求为 代理人工作应该手工居住于。 有WSH 剧本叫 cscript 。vbs 在 ISAPI_Rewrite 能被使用居住于代理人剧本映射的设施文件夹 通过metabase 。 读 配置程序部分 为剧本 用法细节。

配置文件格式
有二类型配置文件- 全球性 (服务器级) 并且各自的(站点级) 文件。 全球性配置 文件应该被命名 httpd 。ini 并且应该出现 ISAPI_Rewrite 设施目录。 这个文件捷径被提供 通过起动菜单。 各自的配置文件应该被命名 httpd 。ini 并且能出现在物理根目录 真正站点。 所有配置文件有同样格式。 并且这是标准的格式 窗口INI 文件设置是残破的由部分的地方。 唯一的部分允许在这个版本 ISAPI_Rewrite 是 [ ISAPI_Rewrite ]. 所有方针 如果被安置在这个部分和每个方向性应该被安置在a 分开的线。 任一文本在这个部分之外将被忽略。

httpd 。ini 文件例子:

[ ISAPI_Rewrite ]

# 这是评论

# 300 = 5 分钟
CacheClockRate 300
RepeatLimit 20

# 对httpd 的块外在通入。ini 和httpd 。解析。错误文件
RewriteRule /httpd(?:\.ini| \ 。解析\ 。错误)/[ F 、i, o ]

# 对帮手ISAPI 引伸的块外在通入
RewriteRule 。*\.isrwhlp/[ F 、i, o ]

# 一些风俗规则
RewriteCond 主人: (.+)
RewriteRule (。*) /$1$2 [ I]



当ISAPI_Rewrite 解析配置文件它创造 误差记录文件命名了 httpd 。解析。错误 在同样 被解析的文件寻找的目录。 唯一明显的句法错误能被查出 在解析期间。 复杂句法错误和逻辑错误能被发现只在期间 统治施行。 如此, 他们不会被采伐入httpd 。ini 。 它是推荐检查 一个新规则与 正则表达式测试工具 在投入规则之前入 配置文件。

RewriteCond 方针
句法: RewriteCond TestVerb CondPattern [ 旗子]

RewriteCond 方针定义一个规则情况。 在a 之前 RewriteRule 或 RewriteHeader 或 RewriteProxy 方针与一个或更多 RewriteCond 方针。 情况影响只下在规则后 (RewriteRule 、RewriteHeader 或RewriteProxy) 。 因而他们有效地一定对这个规则。 一个规则以情况将被运用只如果它将匹配测试串和所有它的区域情况 将匹配他们的测试串。

TestVerb
指定将被匹配反对正则表达式的动词。

TestVerb= (URL | 方法| 版本| HTTPHeaderName: | %ServerVariable) 那里:

URL - 回归请求URI 客户请求如所描述 RFC 2068 年(HTTP 1 。1);
方法 - 回归客户请求HTTP 方法(选择, 得到, 头、岗位, 被投入, 删除或踪影);
版本 - 回归HTTP 版本;
HTTPHeaderName - 指定的HTTP 倒栽跳水的回归价值。 HTTPHeaderName 可能是任一个合法的HTTP 倒栽跳水名字。 倒栽跳水名字 如果包括落后的冒号":". 如果指定倒栽跳水 不是存在在客户的请求 TestVerb 对待 空的串。 HTTPHeaderName =
受理:
接受Charset:
接受内码:
接受语言:
授权:
曲奇饼:
从:
主人:
如果修改自从:
如果比赛:
如果无比赛:
如果范围:
如果非限定自从:
最大批转:
代理人授权:
范围:
Referer:
用户代理:
任何风俗倒栽跳水:


对于关于HTTP 倒栽跳水和他们的价值的更多信息参见RFC 2068 年。

ServerVariable - 指定的服务器可变物的回归价值。 为examlpe, SERVER_PORT 。 服务器可变物完全名单能 被发现在IIS 文献。 易变的名字应该被加前缀 以% 标志。 注意服务器易变的名字是案件敏感。 如此, 使用 %https 代替 %HTTPS, 例如, 总将收效 空的价值。

CondPattern
正则表达式对比赛 TestVerb.

[ 旗子]
旗子 是以下旗子一张逗号被分离的名单:



O (nOrmalize)
正常化串在处理之前。 正常化包括去除 URL 内码、非法字符, 等。 并且, URI 的IIS 正常化完全地取消询问串。 如此, 正常化应该 不被使用如果询问串是需要的。 这面旗子也许是有用的与 URLs 和URL 编码倒栽跳水。

技术笔记:
一个规则的所有正则表达式以情况内部被加入入 种类的一个唯一正则表达式:

(?:Condition1RegExp)\n(?:Condition2RegExp)\n 。..\n(?:ruleRegExp)
然后这个唯一表示被匹配反对联合的倒栽跳水正文串。 缺掉倒栽跳水和可变物被考虑作为空的串。 由于特别 字符 ^ 并且 $ 对应于起点和联合的正文串的结束 (和不是对起点和单独倒栽跳水串的结束) 他们的用法在一个规则以情况也许导致行为完全地与不同 期待的一个。 如此, 它高度被推荐避免用法 ^ 并且 $ 标志 在规则以情况。

RewriteRule 方针
句法: RewriteRule 样式FormatString [ 旗子]

RewriteRule 方针是 真正的重写的耕马。 方针可能发生更比一次。 每个 方针定义一个唯一重写的规则。 定义次序 这些规则是 重要, 因为这次序被使用当 运用规则在执行时间。

样式
指定将被匹配请求URI 的正则表达式。 看见 正则表达式句法 部分为更多 信息。

FormatString
指定将引起新URI 的格式串。 看见 格式 串句法 部分对于更多信息。

[ 旗子]
旗子 是以下旗子一张逗号被分离的名单:

I (ignore 案件)
表明, 字符被匹配不管案件。 这面旗子 影响 RewriteRule 方针和所有对应 RewriteCond 方针。

F (Forbidden)
停止重写的过程和送403 对a 的被禁止的反应 客户。 注意FormatString 是无用的在这种情况下和能是 设置对任一non-empty 串。

L (last 规则)
停止重写的过程这里和不要申请再重写 规则。 使用这面旗子防止当前被重写的URI 是 由以下规则进一步重写。

N (Next 叠代)
力量重写引擎修改规则的目标和重新开始规则 检查从一开始(所有修改被保存) 。 数字 再开始由价值限制被指定在RepeatLimit 方针。 如果这个数字被超出N 旗子简单地将被忽略。

NS (Next 叠代 same 规则)
工作象N 旗子但重新开始规则处理从同样规则(i.e 。 力量重覆 规则应用) 。 唯一规则叠代的最大数字由RepeatLimit 方针给。 但一定数量的唯一规则重覆不计数为重覆的全球性数量 (i.e 。 重覆限制为一定数量的叠代由旗子独立的N 造成 一定数量的重覆由NS 造成) 。

P (力量 proxy)
强迫结果URI 是内部牵强作为代理人请求 并且立刻(i.e 。, 重写规则处理中止这里) 被接通 处理代理人请求的ISAPI 引伸。 您必须做 肯定, 代替串是合法的URI 包括协议, 主人等。 或代理人将退回错误。

R (明确 redirect)
强迫服务器送对客户的直接反应与改指示方向, 提供结果URI 作为一个新地点。 改规则方向总是 持续规则。

RP (永久改方向)
几乎同一样[ R ] 旗子但发布301 (永久地行动) HTTP 状态编码 302 (被移动的临时) 。

U (Unmangle 日志)
采伐URL 照原样最初被请求了并且不是当URL 是 重写。

O (nOrmalize)
正常化串在处理之前。 正常化包括去除 URL 内码、非法字符, 等。 并且, URI 的IIS 正常化完全地取消询问串。 如此, 正常化应该 不被使用如果询问串是需要的。 这面旗子是有用的与 URLs 和URL 编码倒栽跳水。

CL (Case Lower)
改变格式结果的案件降下。

CU (Case Upper)
改变格式结果的案件到鞋帮。

RewriteHeader 方针
句法: RewriteHeader HeaderName 样式FormatString [ 旗子]

RewriteHeader 方向性 是更加一般的变形 RewriteRule 方向性 并且它被设计重写不仅客户请求的URL 零件, 但任何 HTTP 倒栽跳水。 这个方针可能使用重写, 创造或删除任一HTTP 倒栽跳水, 甚至客户请求的变动方法。

HeaderName
指定将被重写的HTTP 倒栽跳水。 可能的价值是 同一样为 TestVerb 参量在 RewriteCond 方向性。 因而, RewriteRule 方针是同义词对 RewriteHeader URL 样式格式[ 旗子]

样式
指定将被匹配反对指定的倒栽跳水的正则表达式。 看见 正则表达式句法 部分为更多 信息。

FormatString
指定将引起新倒栽跳水价值的格式串。 看见 格式 串句法 部分对于更多信息。

[ 旗子]
旗子 是以下旗子一张逗号被分离的名单:

I (ignore 案件)
表明, 字符被匹配不管案件。 这面旗子 影响 RewriteHeader 方针和所有对应 RewriteCond 方针。

F (Forbidden)
停止重写的过程和送403 对a 的被禁止的反应 客户。 注意FormatString 是无用的在这种情况下和能是 设置对任一non-empty 串。

L (last 规则)
停止重写的过程这里和不要申请再重写 规则。

N (Next 叠代)
力量重写引擎修改规则的目标和重新开始规则 检查从一开始(所有修改被保存) 。 数字 再开始由价值限制被指定在RepeatLimit 方针。 如果这个数字被超出N 旗子简单地将被忽略。

NS (Next 叠代 same 规则)
工作象N 旗子但重新开始规则处理从同样规则(i.e 。 力量重覆 规则应用) 。 唯一规则叠代的最大数字由RepeatLimit 方针给。 但一定数量的唯一规则重覆不计数为重覆的全球性数量 (i.e 。 重覆限制为一定数量的叠代由旗子独立的N 造成 一定数量的重覆由NS 造成) 。

R (明确 redirect)
强迫服务器送对客户的直接反应与改指示方向, 提供新URI 作为一个新地点。 改规则方向总是 最后规则。

RP (永久改方向)
几乎同一样[ R ] 旗子但发布301 (永久地行动) HTTP 状态编码 302 (被移动的临时) 。

U (Unmangle 日志)
采伐URL 照原样最初被请求了并且不是当URL 是 重写。

O (nOrmalize)
正常化串在处理之前。 正常化包括去除 URL 内码、非法字符, 等。 并且, URI 的IIS 正常化完全地取消询问串。 如此, 正常化应该 不被使用如果询问串是需要的。 这面旗子是有用的与 URLs 和URL 编码倒栽跳水。

CL (Case Lower)
改变格式结果的案件降下。

CU (Case Upper)
改变格式结果的案件到鞋帮。

去除倒栽跳水, 格式串样式应该引起空的串。 例如这个规则从客户请求将取消用户代理信息:

RewriteHeader 用户代理: .* $0


并且这个规则将增加老Url 倒栽跳水来请求, 提供请求Url 作为倒栽跳水价值:

RewriteCond URL (。*)RewriteHeader 老Url: ^ $ $1


最后个例子将指挥所有WebDAV 请求对/webdav 。asp 剧本 由改变请求方法:

RewriteCond 方法选择RewriteRule (。*) /webdav 。asp?$1RewriteHeader 方法选择得到

RewriteProxy 方针
句法: RewriteProxy 样式FormatString [ 旗子]

强迫结果URI 是内部作为代理人请求和立刻牵强 (i.e 。, 重写规则处理中止这里) 被接通ISAPI 引伸 那个把柄代理人请求。 这允许IIS 作为代理服务系统和改线 请求对其它站点和服务器。

样式
指定将被匹配请求URI 的正则表达式。 看见 正则表达式句法 部分为更多 信息。

FormatString
指定将引起新URI 的格式串。 看见 格式 串句法 部分对于更多信息。 为这方向性FormatString 如果引起合法的URL (包括协议、主人, 等。) 或ISAPI_Rewrite 代理人模块将退回错误。

[ 旗子]
旗子 是以下旗子一张逗号被分离的名单:

D (Delegate 安全)
代理人模块将设法登录在遥远的服务器与证件 当前被扮演的用户。 在固定IIS 认证的情况下 这将是送原始的请求用户的证件。 读 以下 章节 为细节。

C (用途 Credentials)
代理人模块将设法登录在一台遥远的服务器与证件 指定在URL 或基本验证倒栽跳水。 与这 旗子您能使用http://user:password@host 。com/path/ 句法为 URLs 。 读以下 章节 为细节。

F (Follow 改方向)
ISAPI_Rewrite 将设法映射改指示(301, 302, 等方向。) 由一台遥远的服务器返回入当地服务器namespace 。 如果遥控 服务器退回改方向指向地点某处在那 服务器, ISAPI_Rewrite 将修改这改指示方向指向 对当地服务器名字。 这将掩藏真正的(内部) 服务器 名字从用户。

F 旗子能被使用强迫代理人模块对内部 随后而来改指示方向从一台遥远的服务器返回。 用途 这面旗子如果您不需要接受改方向从遥远的服务器 根本。 谨慎地使用这面旗子。 它能打破一些服务器 应用。 例如, 。网络WinForms 认证设置客户曲奇饼在期间 一改方向。 如果代理人将被指示处理这改曲奇饼方向将丢失 并且用户从未将被证实。

I (ignore 案件)
表明, 字符被匹配不管案件。 这面旗子 影响 RewriteProxy 方针和所有对应 RewriteCond 方针。

U (Unmangle 日志)
采伐URL 照原样最初被请求了并且不是当URL 是 重写。

O (nOrmalize)
正常化串在处理之前。 正常化包括去除 URL 内码、非法字符, 等。 并且, URI 的IIS 正常化完全地取消询问串。 如此, 正常化应该 不被使用如果询问串是需要的。 这面旗子是有用的与 URLs 和URL 编码倒栽跳水。

H (保存 Host)
代理人模块将使用当前的主人倒栽跳水为请求对一台遥远的服务器。 没有这面旗子 代理人由一台遥远的服务器将组成主人倒栽跳水从主机名和口岸。

A (Add 认证倒栽跳水)
允许通过认证信息从代理人对一台内部服务器当 客户认证反对代理服务系统被使用。 代理人模块将添附倒栽跳水 X ISRW 代理人AUTH 类型,X ISRW 代理人AUTH 用户,X ISRW 代理人注册用户,X ISRW 代理人遥远用户

对应于服务器可变物 AUTH_TYPE,AUTH_USER,LOGON_USER,REMOTE_USER

对请求被送到a proxied 服务器。

认证计划可利用为代理人。
IIS 建筑学和代理人模块实施强加确定制约 能被使用以代理人的认证计划。 可利用的计划下述:

匿名- 匿名 - 没有认证在客户和代理人之间和在a 之间 代理人和一台遥远的服务器。 两台服务器(代理人和遥控) 应该被配置允许 匿名认证。 不C 亦不D 代理人选择应该被指定。
匿名- 基本 - 没有认证在客户和代理人之间。 但一台遥远的服务器 要求基本验证。 二种可能性存在那里:
用户证实直接地反对一台遥远的服务器。 代理服务系统应该是 配置为匿名认证 只. 有其他认证 使能将导致认证失败。 遥远的服务器应该允许基本 认证。 不C 亦不D 代理人选择应该被指定。
用户不证实反对一台遥远的服务器。 但代理人证实 反对一台遥远的服务器与明确证件。 注册证件应该是 明确地指定在a proxied URL 。 C 旗子应该被指定, D 旗子不应该是 集合。
匿名- 窗口集成 - 用户不证实反对一台遥远的服务器。 但代理人证实反对一台遥远的服务器与IIS 工作者过程证件。 IIS 工作者过程在代理服务系统应该运行在证件将被使用的帐户之下 为认证。 帐户应该有网络存取。 遥远的服务器应该允许窗口 联合认证。 C 旗子不应该被指定。 D 旗子应该被指定如果遥控 服务器不是在内部网。
基本- 基本 - 用户证实反对代理服务系统并且代理服务系统证实 反对一台遥远的服务器与用户的证件。 两台服务器应该允许基本验证。 C 旗子应该被指定。 D 旗子不应该被指定。
基本- 窗口集成了 - 用户证实反对代理服务系统并且代理服务系统证实 反对一台遥远的服务器与用户的证件。 代理服务系统应该允许基本验证。 遥远的服务器应该允许联合认证。 或C 或D 旗子应该被指定(C 被推荐) 。
NTLM - NTLM - 用户证实反对一种代理人应用在服务器和代理人应用 证实反对其它应用 在同样服务器 (没有方式委派 NTLM 认证对其它服务器) 。 C 旗子不应该被指定。 D 旗子应该被指定。
Kerberos - Kerberos - 用户证实反对代理服务系统和代理服务系统反过来 证实反对遥远的服务器使用user-supplied 证件。 实施这种配置以下要求必须是满意:
客户计算机, 代理服务系统和Proxied 服务器应该属于同样活跃目录领域 或被信任的广告领域(这个要求使这份计划几乎无用为互联网应用。 虽然文章女士 Kerberos 共用 点对配置Kerberos 认证的可能性 为非领域成员客户计算机, 配置步需要为那似乎是也是 复合体为互联网应用) 。
您大概将必须改变应用水池身分为代理人网应用 领域用户(您能读文章 配置一个工作者过程身分使用一个构形的帐户(IIS 6 。0) 了解步要求创造一笔关税帐目) 。 虽然它看起来象网络服务身分应该工作 根据MSDN 文章, 我们无法做Kerberos 运作在代理人之间和 a proxied 服务器以这个身分。 如果您将设置一个习惯身分, 您将需要配置SPNs 为它。 SPNs 配置被描述在 KB 女士文章 871179.
应用水池帐户应该被标记依照"信任为代表团" 。 否则, 如果地方系统 帐户被使用作为应用水池身分, 代理服务系统应该被标记依照"信任为代表团" 。 同时客户帐户不应该被标记象"敏感对代表团" 。 详细的信息关于帐户配置能被发现在文章上 怎么对: 实施Kerberos 代表团为视窗2000.
如果您访问代理服务系统名义上, 是与它的NetBIOS 和广告域名不同, 您将必须登记SPN 为那个名字。 您能读怎么配置另外的SPNs 文章 怎么对: 解决困难与Kerberos 相关的问题在IIS
C 旗子不应该被指定在ISAPI_Rewrite 规则。 D 旗子应该被指定。
如果您有有这种配置的问题, 请, 读 怎么对: 解决困难与Kerberos 相关的问题在IIS 文章在与支持联系之前。
NTLM - Kerberos - 用户证实反对一个代理服务系统以NTLM 认证 并且代理服务系统反过来证实反对遥远的服务器与Kerberos 。 这份计划有 几乎要求和一样 Kerberos - Kerberos 计划。 但是, 它允许任一个互联网客户 可胜任进行NTLM 认证访问内部服务器通过代理人。 这份计划 能被实施只在广告领域跑在窗口2003 当地方式下。 并且应用水池帐户应该被配置允许所有认证的代表团 协议对http 服务在proxied 服务器。

CacheClockRate 方针
句法: CacheClockRate 间隔时间

这个方针可能出现只在全球性配置上下文。 如果这个方针 被发现在它将被忽略的站点级上下文并且错误信息将 给httpd 被写。解析。错误文件。

ISAPI_Rewrite 贮藏它被装载的每个配置文件在第一次。 使用这个方针您能指定特殊站点不活泼的期间 何时它的配置将被清洗从贮藏所。 由设置这个参量 足够大您能强迫ISAPI_Rewrite 从未回收它的贮藏所。 记住 任何变成配置文件更新贮藏所在之后 下个请求不管这间隔时间。

间隔时间
指定不活泼的时期(在几秒钟内) 当特殊配置 将被清洗从贮藏所。 缺省值是3600 (1 个小时) 。

EnableConfig 和DisableConfig 方针
句法:
EnableConfig [SiteID|"Site 名字"]
DisableConfig [SiteID|"Site 名字"]

使能或使站点级配置失去能力为一个选择的站点或改变 缺省。 由缺省站点级配置使能。 这个方针 能出现只在全球性配置上下文。 如果发现在站点级 上下文它将被忽略并且错误信息给httpd 将被写。解析。错误 文件。

SiteID
站点的数字metabase 标识符

站点名字
站点的名字如同看起来在IIS 控制台。

如果使用没有参量这方针转动缺省设置使能/使无能力 配置处理。

例子:

以下意志使能配置只为站点与ID=1 (典型地 这是缺省网站) 并且站点命名了"我的站点":

DisableConfig
EnableConfig 1
EnableConfig "我的站点"


在以下例子配置使能为站点被命名"一些 站点"因为明确设置忽略缺省设置。

EnableConfig "某一站点"
DisableConfig


EnableRewrite 和DisableRewrite 方针
句法:
EnableRewrite [SiteID|"Site 名字"]
DisableRewrite [SiteID|"Site 名字"]

使能或使重写为一个选择的站点失去能力或改变缺省。 重写使能。 这个方针可能出现只在全球性 配置上下文。 如果发现在站点级上下文它将被忽略 并且错误信息给httpd 将被写。解析。错误文件。

SiteID
站点的数字metabase 标识符

站点名字
站点的名字如同看起来在IIS 控制台。

如果使用没有参量这方针使能或使重写失去能力根本。
RepeatLimit 方针
句法: RepeatLimit 极限

这个方针能出现在全球性和在站点级配置 文件。 如果将看起来在全球性配置文件它将改变 全球性极限为整个场地。 如果这个方针将出现在站点级 配置文件它将改变一个极限为这个站点唯一和这个极限 不能超出全球性极限。

ISAPI_Rewrite 允许圈当处理规则(参见描述 RewriteRule 和RewriteHeader 方针的N 旗子) 。 这个方针 准许限制可能的圈的最大数字。 它能调整到零 或一使使成环失去能力。

极限
指定允许的圈的一个最大数字。 缺省值是32 。

RFStyle 方针
句法: RFStyle 老| 新

RFStyle 方针允许控制对改方向和被禁止的反应样式在一个充分的版本 ISAPI_Rewrite 。 缺省 老 样式将发布那些反应直接地从过滤器。 这 方法不是快速的和要求另外的配置。 但原始的请求不能由IIS 在这种情况下采伐。 新 样式力量过滤发布改方向和被禁止的反应通过代理人模块。 这 技术使成为可能对日志被改方向的和被禁止的请求。 但这个方法会要求 手工配置在许多情况下。 代理人模块配置的细节能被发现在 随后而来的章节。

配置程序
ISAPI_Rewrite 充分包括能被发射从ISAPI_Rewrite 节目的配置程序( 小组) 。 它允许您观看试验状态和键入注册代码(如果产品不是 登记在设施期间) 和修改一些产品选择与代理人模块有关 操作。 公共事业被组织作为一个属性表与三物产页:

试验 页。
这页将被显示只如果您安装了ISAPI_Rewrite 在试验方式。 它允许您 观看产品的试验状态和键入注册代码。

设置 页。
这页包含校正框和复选框为以下参量:

帮手URL
这个参量影响通信方式在过滤器和代理人模块之间。 这能是或者文件附本被加前缀与小点(象。isrwhlp) 或绝对URI (象/isrwhlp/rwhelper 。dll) 。

在第一案件, 引伸将被添附对原始的请求URI 和 代理人模块将被祈求通过剧本地图。 缺省引伸"。isrwhlp "增加 对全球性剧本地图在安装过程期间。 如果您改变了这 引伸或如果您的应用不继承全球性剧本地图设置您 手工如果增加一个必需的词条来剧本地图。 它应该有以下 参量: 可执行: 一个绝对路径向rwhelper 。dll 在 简易格式
引伸: 渴望的引伸(。isrwhlp 是缺省)
动词无线电按钮: 所有动词
剧本引擎复选框: 检查
检查文件存在复选框: 未经检查


我们创造了一WSH 剧本proxycfg 。能简化帮手引伸的vbs 注册在剧本映射。 它位于ISAPI_Rewrite 设施文件夹, 能跑 从命令行这样: cscript proxycfg 。vbs [ - r ] [ MetabasePath ]


任意 - r 参量强迫剧本递归地登记引伸在metabase 。
任意 MetabasePath 参量允许第一metabase 钥匙的规格 对过程。 它是"/localhost/W3SVC" 。

登记引伸在所有现有的剧本地图您能祈求剧本与 随后而来的命令串:
cscript proxycfg 。vbs - r


在第二个案件(绝对URI) 您应该提供URI 象 /vfolder/rwhelper 。dll 为' 帮手URL 的' 价值。 您应该并且映射 ISAPI_Rewrite 的设施文件夹作为一个选上的真正文件夹(/vfolder) 对会使用proxying 和会使能executables 发射为这些的一个各个站点 真正文件夹。

注: 照原样由我们的顾客报告了, IIS 5 (和愿是IIS 4) 有问题 以一长的目录名称在帮手URL 。 如此, 它强烈被推荐突然使用 目录名称。

两个方法有好处和缺点。 第二个允许您隔绝代理人 应用从其它应用但这个方法能无法在IIS6 之下。 第一个应该运作优良在IIS6 之下但代理人模块将被祈求在上下文 应用由原始的请求URL 瞄准。

工作者穿线极限
这个参量限制工作者螺纹的最大数字在代理人引伸螺纹 水池。 缺省值0 意味, 这个极限与处理器的数量将是相等的 以2 乘。

激活穿线极限
这个参量限制一致地运行的工作者螺纹的最大数字。 这 价值不能是大于"工作者螺纹极限" 。 缺省值0 意味这 极限与处理器的数量将是相等的。

队列大小
这个参量定义能排队为处理请求的最大数字 代理人模块的唯一事例。 您能增加这个参量如果您曾经将 看见"队列暂停到期了" 消息在应用事件日志。

队列暂停
这个参量定义最大等待时间为安置新请求入内部 请求队列。 它变得实际当排队的请求的数字到达它的最大值 由"队列大小" 参量定义。 您能增加这个参量如果您曾经将 看见"队列暂停到期了" 消息在应用事件日志。

连接暂停
指定连接暂停为代理人模块在毫秒。 缺省值 是60000 (60 秒) 。

送暂停
指定送暂停为代理人模块在毫秒。 缺省值 是30000 (30 秒) 。

接受暂停
指定接受暂停为代理人模块在毫秒。 缺省值 是30000 (30 秒) 。

压制错误细节
指定, 代理人模块不应该寄发详细的错误信息到客户。 缺省值是真实的。

关于 页。
它包含版权信息和一个链接到ISAPI_Rewrite 的网站。

正则表达式句法
这个部分给摘要 正则表达式句法的描述由ISAPI_Rewrite 使用。 完成描述 句法能被发现在 助力。Regex 文献.

印刷错误
所有字符是印刷错误除了: "."," * ","?"," + ", "(",")", "{", "}", "[", "]", "^" 和"$" 。 这些字符是印刷错误当 由"\" 在之前。 印刷错误是匹配自己的字符。

计算机通配符
小点字符"。"匹配任一个唯一字符 除了零字符和换行字符。

重覆
重覆是被重覆任意的表示 次数。 表示跟随被"*" 可能被重覆任一个数字 时期包括零。 表示跟随被"+" 可能被重覆任一个数字 时期, 但至少一次。 表示随后了而来由"?"可以被重覆零 或你只计时。 当它是必要指定极小值和最大值 重覆的数字明确, 区域操作员"{}" 也许被使用, 因而"a{2}" 是信件"a" 确切地被重覆两次, "a{2,4}" 代表信件"a" 重覆在2 和4 时间之间, 和"a{2,}" 代表信件"a" 被重覆 至少两次没有上限。 注意那里必须是没有白色空间 在里面{}, 和没有上限在更低和鞋帮的价值 区域。 所有重覆表示提到最短可能早先 次级表示: 一个唯一字符; 字符集, 或次级表示 编组 与"()" 例如。

例子:

"ba *" 将匹配所有"b", "ba", "baaa" 等。
"ba+" 将匹配"ba" 或"baaaa" 例如但不是 "b" 。
"ba?"将匹配" b "或" ba "。
"ba{2,4}" 将匹配"发咩声", "baaa" 和"baaaa" 。
非贪婪 重覆
非贪婪的重覆是可能的由添附'?' 以后 重覆; 非贪婪的重覆是一个将匹配 最短 可能 串。

例如对比赛HTML 标记对你能使用 某事喜欢:

"<\s*tagname[^>]*>(。*?)<\s*/tagname\s*>"

$1 在这种情况下将包含文本在标记之间 对, 和将是最短的可能的匹配的串。

括号
括号一起为二个目的服务, 对组项目 入一个次级表示, 和对标记什么引起了比赛。 例如 表示"(ab) *" 会匹配所有串"ababab" 。 所有潜水艇比赛 由括号标记能参考使用\N 或$N 句法。 它是 可允许使次级表示匹配空行。 次级表示是 标注从左到右从1 开始, 次级表示0 是整体 表示。

非标号括号
有时您需要编组次级表示与 括号, 但不要括号吐在另之外被标记 次级表示, 在这种情况下非标号括号(?:表示) 可能是 使用。 例如以下表示不创造次级表示:

"(?:abc) * "

选择
选择发生当表示可能匹配或者 一个次级表示或另, 各个选择由分离"|" 。 每个 选择是最大的可能的早先次级表示; 这是 相反行为从重复操作员。

例子:

"a(b|c)" 能匹配"ab" 或"ac" 。
"abc|def" 能匹配"abc" 或"def" 。
集合
集合是可能匹配任何唯一的一套字符 是集合的成员的字符。 集合划定由"[" 和"]" 和 罐头 包含印刷错误, 字符范围, 字符类别, 校对的元素和 相等类。 设置开始"^" 包含的声明 恭维 元素随后而来。

例子:

字符印刷错误:

"[ abc ]" 将匹配或"a", "b", 或"c" 。
"[ ^abc ] 将匹配任一个字符除" a 之外"," b ", 或"c" 。
字符范围:

"[ a-z ]" 将匹配任一个字符在范围"a" "z" 。
"[ ^A-Z ]" 将匹配任一个字符除那些之外 范围"A" 对"Z" 。
字符类别
字符类别表示使用句法 "[:classname:] "在集合声明之内, 例如" [ [:空间:] ] "是集合 所有whitespace 字符。 可利用的字符类别是:

alnum 任何阿尔法数字字符。
阿尔法 任何字母符号a-z 和A-Z 。 其他 字符也许并且是包括取决于地点。
空白 任何空白符, 或空间或a 制表符。
控制 任何调节性。
数字 任何数字0-9 。
图表 任何图解字符。
更低 任何小写字母a-z 。 其它字符 愿并且是包括取决于地点。
印刷品 任何可印的字符。
punct 任何标点字符。
空间 任何whitespace 字符。
上部 任何大写体字符A-Z 。 其它字符 愿并且是包括取决于地点。
xdigit 任何十六进制数字字符, 0-9, a-f 和 A-F 。
词 任何词字符- 所有字母或数字字符 加上底线。
unicode 代码是大于255 的任何字符, 这向宽字符特征运用类 只。

有在位置能被使用的一些捷径 字符类别:

\w 在位置[:词:]
\s 在位置[:空间:]
\d 在位置[:数字:]
\l 在位置[:更低:]
\u 在位置[:鞋帮:]
校对 元素
校对的元素采取一般形式[ 。tagname 。] 在集合声明里面, tagname 是或者a 唯一字符, 或一个校对的元素的名字, 例如[ [ 。a 。] ] 是 等值[ a ], 和[ [ 。逗号。] ] 是等效的对[, ] 。 ISAPI_Rewrite 支持 所有标准POSIX 校对的元素名字, 和另外以下 合体字母: "ae", "ch", "ll", "ss", "nj", "dz", "lj", 每个在更低, 鞋帮和 标题案件变异。 多字符校对的元素可能导致集合 匹配超过一个字符, 例如[ [ 。ae 。] ] 会匹配二 字符, 但注意那[ ^ [ 。ae 。] ] 只会匹配一个字符。

相等类
相等类采取一般形式[ = tagname = ] 在a 里面 设置声明, 的地方 tagname 是或者每唯一 字符, 或一个校对的元素, 和比赛的名字是的任何字符 a 主要相等类的成员和校对的元素一样 [ 。tagname 。]. 相等类是校对同样的一套字符, 主要相等类是主要分类键是的一套字符 所有同样(例如串由字符典型地校对, 然后 口音, 和然后由案件; 主要分类键与字符然后关系, 次要对accentation, 和三重对案件) 。 如果没有 相等类对应 tagname, 然后 [ = tagname = ] 确切地是同一样[ 。tagname 。].

包括印刷错误"-" 在集合声明然后: 做 它第一字符在开头以后"[" 或"[^", 范围的终点, a 校对的元素, 或在它之前以逃命字符和在"[\-]". 包括一逐字"[" 或"]" 或"^" 在集合那么做他们终点a 范围, 一个校对的元素, 或在之前以逃命字符。

线 船锚
船锚是某事匹配空行 线的开始或末端: "^" 匹配空行在线的开始, "$" 匹配空行在线的末端。

后面 参考
后面参考是在早先的参考 已经被匹配的次级表示, 参考是对什么 次级表示匹配了, 不是对表示。 后面参考包括 逃命字符"\" 被数字"1" 跟随到"9", "\1" 提到 第一次级表示, "\2" 对第二等。 例如表示 "(。*)\1 "匹配被重覆关于它的中点例如的任一串 "abcabc" 或"xyzxyz" 。 在没有的次级表示的后面参考 参加任一次比赛, 比赛空行。 在ISAPI_Rewrite 所有支持 参考是全球性的为整个RewriteRule 和对应的RewriteCond 方针。 次级比赛被编号下来和左对正确的起点 从 对应的RewriteRule 方针的第一RewriteCond 方针, 如果 有一。

向前Lookahead 断言
有这些的二个形式; 一个人为正面向前lookahead 断言, 和一个人为 消极lookahead 断言:

"(?= abc)"匹配零的字符只如果他们被表示跟随" abc "。
"(?!abc)"匹配零的字符只如果他们被表示不跟随" abc "。

词 操作员
以下操作员为兼容性被提供 与GNU 正则表达式图书馆。

"\w" 匹配是成员的任一个唯一字符 "词" 字符类别, 这与表示是相同的"[ [:词:]]".
"\W" 匹配不是a 的任一个唯一字符 "词" 字符类别的成员, 这与表示是相同的 "[^[:词:]]".
"\<" 匹配空行在a 开始 词。
"\>" 匹配空行在结尾的 词。
"\b" 匹配空行在或者开始或 词的结尾。
"\B" 匹配空行在词之内。
逃命 操作员
逃命字符"\" 有几个意思。

逃命操作员也许介绍一名操作员为 例子: 后面参考, 或词操作员。
逃命操作员也许做以下字符 法线, 例如"\ *" 代表印刷错误"*" 而不是重覆 操作员。
唯一字符逸出序列:
以下逸出序列是别名为唯一 字符:


逸出序列 字符码 意思
\a 0x07 报警符。
\t 0x09 制表符字符。
\v 0x0B 垂直的制表符。
\e 0x1B ASCII 逃命字符。
\0dd 0dd 一个八字符码, dd 是一个或更多八数字。
\xXX 0xXX 一个十六进制字符码, XX 是一个或的地方 更加十六进制的数字。
\x{XX} 0xXX 一个十六进制字符码, XX 是一个或的地方 更加十六进制的数字, 任意地unicode 字符。
\Z z-@ ASCII 逸出序列控制Z, Z 是的地方 任何ASCII 字符大于或等于字符码为 ' @ ' 。

混杂逸出序列:
下列主要为perl 被提供 兼容性, 但注意到, 有在\l 的意思上的一些区别 \L \u 和\U:

逸出序列 意思
\w 等值对[ [:词:]].
\W 等值对[ ^ [:词:]].
\s 等值对[ [:空间:]].
\S 等值对[ ^ [:空间:]].
\d 等值对[ [:数字:]].
\D 等值对[ ^ [:数字:]].
\l 等值对[ [:更低:]].
\L 等值对[ ^ [:更低:]].
\u 等值对[ [:鞋帮:]].
\U 等值对[ ^ [:鞋帮:]].
\C 任何唯一字符, 等效对' 。'.
\X 匹配任一Unicode 结合字符序列, 例如"a\x 0301" (一封信件a 与深刻) 。
\Q 开始行情操作员, 一切随后而来 对待一个逐字字符直到\E 结尾行情操作员是 发现。
\E 结尾行情操作员, 终止一个序列 从\Q 开始。
什么得到 匹配?
正则表达式将匹配第一可能 匹配的串, 如果超过一串开始在一个指定的地点可能匹配 然后它匹配最长的可能的串。 在他们是多处 可能的比赛所有开始在同样地点, 和所有同样长度, 然后比赛被选择是那个以最长的第一个次级表示, 如果那 是同样为二次或更多比赛, 那么第二个次级表示将是 审查等等。 注意ISAPI_Rewrite 使用比赛算法。 结果是 匹配只如果表示匹配整体输入序列。 例如:

RewriteCond URL ^/somedir/。* # 将匹配任一个请求 somedir 目录和补充指南, 当
RewriteCond URL ^/somedir/ # 将匹配唯一请求 对根 somedir 。
特别笔记关于"病理性" 正则表达式
ISAPI_Rewrite 使用一个非常强有力的正则表达式引擎Regex++ 从助力图书馆。 但是它有一些限制: 那里存在一些"病理性" 表示 哪些可以需要指数时刻为匹配; 这所有涉及被筑巢的重复操作员, 例如试图匹配表示"(a*a)*b" 反对N 信件a's 需要时间 比例到2N. 这些表示装于罐中(几乎) 总被重写用这样方式 至于避免问题, 例如"(a*a)*b" 作为"只要求的a*b" 能被重写 线性地计时比例与N 解决。 在一般案件, 非被筑巢的重覆表示 需要时间比例与N2, 然而如果条目然后是互相排斥 他们可能被匹配在线性时间- 这是实际情形以"a*b", 为各个字符 分类员或将匹配"a" 或"b" 或将失败, 和与"a*a" 分类员无法告诉的地方 哪个分支采取(第一"a" 或秒钟) 并且如此必须尝试两个。

Regex++ 可能查出这样"病理性" 正则表达式和终止 他们的匹配。 这将导致ISAPI_Rewrite 的规则失败。 当规则失败ISAPI_Rewrite 寄发"500 内部服务器错误- 规则未通过的" 状态 对客户表明配置错误。

格式 串句法
在格式串, 所有字符对待 印刷错误除去: "(",")", "$", "\", "?", ":".

使用任何这些作为印刷错误您必须给他们加前缀 以逃命字符\

以下特别序列是 认出:

编组:
使用括号字符(和) 编组 次级表示在格式之内串起, 使用\ (和\) 代表印刷错误 ' (' 并且') ' 。

次级表示 扩展:
以下perl 象表示扩展对a 特殊被匹配的次级表示:

$` 扩展对所有文本从结尾的 早先比赛对当前的比赛的开始, 如果没有早先的 匹配在当前的操作, 然后一切从一开始 输入串到比赛的开始。
$' 扩展对所有文本从比赛的末端 对输入串的末端。
$& 扩展对所有当前的比赛。
$0 扩展对所有当前的比赛。
$N 扩展对匹配次级表示的文本 N.

有条件 表示:
条件表达式提供二不同格式 串取决选择的是否次级表示参与了 比赛:

?Ntrue_expression:false_expression

执行true_expression 如果次级表示 N 参加比赛, 否则执行 false_expression 。

例子: 假设我们寻找"(while)|(for)" 然后 格式化串"?1WHILE:为"会输出什么匹配了, 但以大写。

逸出序列:
以下逸出序列并且被允许:


\a 报警符。
\f 换页字符。
\n 换行字符。
\r 回车号。
\t 制表符字符。
\v 一个垂直的制表符字符。
\x 一个十六进制字符- 例如\x0D 。
\x{} 一个可能的unicode 十六进制字符- 为 例子\x{1A0}
\cx ASCII 逃命字符x, 例如\c @ 是 等值逃脱@ 。
\e ASCII 逃命字符。
\dd 一个八字符常量, 例如 \10 。
例子
看齐基于主人倒栽跳水的真正站点在唯一 站点
例如您登记了二个领域 万维网。site1 。com 并且 万维网。site2 。com. 现在 您能创造二个不同站点使用唯一物理站点。 增加 随后而来 规则对您的httpd 。ini 文件:

[ ISAPI_Rewrite ]

# 固定缺掉深砍炭灰在文件夹
RewriteCond 主人:  (.*)
RewriteRule ([ ^ 。?]+[^.?/ ]) http \://$1$2/ [ I,R ]

# 看齐site1
RewriteCond 主人:  (?:万维网\ 。)?site1 \ 。com
RewriteRule (。*) /site1$1 [ I,L ]

# 看齐site2
RewriteCond 主人:  (?:万维网\ 。)?site2 \ 。com
RewriteRule (。*) /site2$1 [ I,L ]




现在正义地方您的站点 /site1 并且 /site2 目录。

或您能使用更加普通的规则:

[ ISAPI_Rewrite ]

# 固定缺掉深砍炭灰在文件夹
RewriteCond 主人:  (.*)
RewriteRule ([ ^ 。?]+[^.?/ ]) http \://$1$2/ [ I,R ]

RewriteCond 主人:  (万维网\ 。)?(.+)
RewriteRule (。*) /$2$3




目录名称对于站点应该是象 /somesite1 。com, /somesite2 。信息, 等。

使用圈(下面旗子) 转换请求参量
假设您希望访问物理URLs 象 http://www 。myhost 。com/foo 。asp?a=A&b=B&c=C 使用请求喜欢 http://www 。myhost 。com/foo 。asp/a/A/b/B/c/C 并且 参量的数字也许变化从一个请求到另一个。

那里存在至少二种可能的解答。 您能简单地增加一个分开的规则为各个可能的数字 参量或您能使用技术由以下例子展示。

[ ISAPI_Rewrite ]
RewriteRule (。*?\.asp)(\?[^/]*)?/([^/]*)/([^/]*)(.*) $1(?2$2&:\?)$3=$4$5 [ NS, i ]


注意这个规则也许打破页相对链接对CSSs 、图象, 等。这归结于一个变化在由浏览器使用的基本的道路(父母文件夹上页) 计算完成资源URI 。 有三种可能的解答:

使用规则下面被给。 它不影响基本的道路。
直接地指定正确基本的道路为页在<base 帮助下href=../../"/folder/page 。asp"> 标记。
改变所有页相对链接到或根相对或绝对形式。

这个规则从请求URL 将提取一个参量, 添附它对请求串的末端 并且再开始规则处理从一开始。 如此它将使成环直到所有参量将被移动 对正确的地方(或直到RepeatLimit 将被超出) 。

那里并且存在这个规则的许多变异用不同的分隔符字符。 例如, 使用URLs 喜欢 http://www 。myhost 。com/foo 。asp~a~A~b~B~c~C 以下规则能 被实施:

[ ISAPI_Rewrite ]
RewriteRule (。*?\.asp)(\?[^~]*)?~([^~]*)~([^~]*)(.*) $1(?2$2&:\?)$3=$4$5 [ NS, i ]


连续服务器在IIS 之后
假设我们有互联网服务器跑IIS 和几台公司服务器 跑其它平台。 这些服务器直接地不是容易接近的从 互联网但只从我们的公司网。 这一个简单的例子怎么 映射其它服务器入IIS 选址namespace 使用代理人旗子:

[ ISAPI_Rewrite ]
RewriteProxy /mappoint(。+) http \://sitedomain$1 [ I,U ]

移动的站点从UNIX 对IIS
这统治可能帮助改变URL 从/~username /username 和/file 。HTML 对/file 。htm 。 它可能是有用的如果您移动了您 站点从UNIX 对IIS 和保留得到命中对老页从查寻 引擎 并且其它外在页。

[ ISAPI_Rewrite ]

# 改方向更新老链接
RewriteRule (。*)\.HTML $1 。htm
RewriteRule/~ (。*) http \://myserver/$1 [ R ]


移动的现场选址
许多万维网主管请求解答对以下 问题: 他们想要改所有请求方向对一台网络服务器到另一个 网 服务器。 这样问题通常出现当您需要建立一个更新的网 将替换老一随时间的服务器。 解答将使用 ISAPI_Rewrite 在老网络服务器:

[ ISAPI_Rewrite ]

# 改方向更新老链接
RewriteRule (。+) http \://newwebserver$1 [ R ]


浏览器依赖内容
它是有时必要提供浏览器依赖 满意至少为重要上层页, i 。e 。 你必须提供a full-featured 版本为Internet Explorer, 一个极小值特色的版本为 天猫座浏览器和一个平均特色的版本为其他。

我们必须行动在HTTP 倒栽跳水"用户代理" 。 样品代码做以下: 如果HTTP 倒栽跳水"用户代理" 包含 "MSIE", 目标foo 。htm 被重写对foo 。IE 。htm 。 如果 浏览器是"天猫座" 或"Mozilla" 版本1 或2 URL 成为foo 。20.htm 。 其它浏览器接受页foo 。32.HTML 。 所有 这由以下ruleset 做:

[ ISAPI_Rewrite ]

RewriteCond 用户代理:  .* MSIE 。*
RewriteRule /foo \ 。htm /foo 。IE 。htm [ L ]

RewriteCond 用户代理:  (?:Lynx|Mozilla/[12 ]) 。*
RewriteRule /foo \ 。htm /foo 。20.htm [ L ]

RewriteRule /foo \ 。htm /foo 。32.htm [ L ]


动态地引起的机器人。txt
机器人。txt 是搜寻引擎用途发现的文件 应该或不应该被标注的URLs 。 但这个文件的创作为大 站点以全部动态内容是一个非常复杂任务。 让您曾经作梦 关于动态地引起的机器人。txt? 我们写机器人。asp 剧本:

<%@ Language=JScript EnableSessionState=False%>
<%

//The 剧本必须退回纯文本
反应。ContentType="text/plain";

/ *
安置世代代码这里
*/

%>


现在做它机器人。txt 使用唯一规则:

[ ISAPI_Rewrite ]

RewriteRule /robots \ 。txt /robots 。asp


做查寻引擎标注动态页
站点的内容被存放在XML 归档。 有 /XMLProcess 。asp 文件 那过程XML 文件在服务器 并且回归HTML 对终端用户。 URLs 对文件有一个形式:
http://www 。mysite 。com/XMLProcess 。asp?xml=/somdir/somedoc 。xml
但许多普遍的查寻引擎不会标注这样 文件因为URLs 包含问号(文件动态地是 引起) 。 ISAPI_Rewrite 可能competely 消灭这个问题。

[ ISAPI_Rewrite ]

RewriteRule /doc(。*)\.htm /XMLProcess 。asp \?xml=$1 。xml


现在访问文件用途URL 喜欢 http://www 。mysite 。com/doc/somedir/somedoc 。htm. 查寻 引擎从未知道, 完全没有somedoc 。htm 文件和 内容 动态地引起。

消极表示(不是)
有时您需要运用规则当某一样式不是匹配。 在这种情况下 您可以使用所谓的向前Lookahead 断言在正则表达式。

例如您需要移动所有用户不是使用 Internet Explorer 对另一地点:

[ ISAPI_Rewrite ]
# 改所有方向非Internet Explorer 用户
# 对其它地点
RewriteCond 用户代理: (?!.* MSIE).*
RewriteRule (。*) /nonie$1


动态认证
例如我们有一些成员区域在站点并且我们需要密码保护 文件在这个区域而是我们不喜欢使用固定服务器安全。 在这中 案件它是可能创造ASP 剧本(电话它代理人。将代理人的asp) 所有请求对成员区域和检查对于必需的允许。 这里 是一块简单的模板为您能投入您自己的授权的这页 代码:

<%@ Language=JScript EnableSessionState=False%>
<%
作用Authorize()
{

  //Check 如果用户被批准观看资源这里
  //Return 配齐如果用户有必需的允许, 否则回归假

  回归配齐;
}
if(!Authorize())
{
  //Redirect 对注册页
  反应。Redirect("http://mysite 。com/LoginPage 。asp?ref="+Request 。QueryString 。项目);
  反应。End()
}
var WinHttpReq = 新ActiveXObject("WinHttp 。WinHttpRequest 。5");
WinHttpReq 。Open(Request 。ServerVariables("REQUEST_METHOD") 。项目, 请求。QueryString 。项目, 配齐);
var headers=String(Request 。ServerVariables("ALL_RAW")) 。split("\n");
for(i=0; i<headers 。长度&& headers[i ]; i++)
{
  倒栽跳水= headers[i ] 。match(/([\w - \ 。]+):\s*([ \S ]*)/);
  if(header)
    WinHttpReq 。SetRequestHeader(header[1], header[2 ]);
}
if(lngCount = 请求。TotalBytes)
{
  var data=Request 。BinaryRead(lngCount);
  WinHttpReq 。Send(data);
} {
  WinHttpReq 。Send();
}
if(!WinHttpReq 。WaitForResponse(15))
{
  WinHttpReq 。Abort();
  反应。Status="408 请求暂停";
} {
  反应。状态= "" + WinHttpReq 。状态+ "" + WinHttpReq 。StatusText;
  headers=String(WinHttpReq 。GetAllResponseHeaders()) 。split("\n");
  for(i=0; i<headers 。长度&& headers[i ]; i++)
  {
    倒栽跳水= headers[i ] 。match(/([\w - \ 。]+):\s*([ \S ]*)/);
    if(header)
      反应。AddHeader(header[1], header[2 ]);
  }
  反应。Write(WinHttpReq 。ResponseText);
}
%>


现在我们需要配置ISAPI_Rewrite 对代理人请求通过这页:

[ ISAPI_Rewrite ]
# 代理人所有请求通过代理人。asp
RewriteRule /members(。+) /proxy 。asp \?http \://mysite 。com/members$1

阻拦线型图象(中止热连接)
假设我们有一些页与inlined GIF 图表下 http://www 。mysite 。com/. 这些图表直接地是好的, 那么其他 合并他们通过超链接对他们的页。 我们不喜欢这实践 因为它补充说无用交易对我们的服务器。

当我们无法100% 保护图象免受包括, 我们至少能 制约浏览器送HTTP 的箱子 Referer 倒栽跳水。

[ ISAPI_Rewrite ]
RewriteCond 主人: (.+)
RewriteCond Referer: (?!http://\1 。*).*
RewriteRule 。*\.(?:gif|jpg|png) /block 。gif [ I,O ]


正则表达式测试工具
RXTest 公共事业能使用模仿规则施行。 以下例子展示它 用法。

一个简单规则:
RewriteRule (。+) http \://newwebserver$1 [ I,R ]

正则表达式 textbox 将对应于 样式 一部分的规则。 这里它将是:


(.+)

格式串 textbox 将对应于 格式 一部分的规则。 在这种情况下它 将是:
http \://newwebserver$1

忽略案件 复选框将对应于 I 规则的旗子。 如此, 它将被检查。
某事喜欢 /test 能被采取作为测试串。 然后您将得到 http://newwebserver/test 作为 格式结果.

一个规则以情况:
RewriteCond 主人: (?!万维网\ 。)(.+)
RewriteRule (。+) http \://www 。$1$2 [ I, rp ]

结合二个正则表达式入不会发生的唯一一某一分隔符字符 在真正的URI 能被使用。 例如, 它能是 !. 然后 正则表达式 意志 是:

(?!万维网\ 。)(.+)!(.+)

格式串 textbox 将是:
http \://www 。$1$2

忽略案件 复选框将被检查。
如果 万维网。主人。com!/anything 将被采取作为 测试串 结果将是 不是 匹配. 但 主人。com!/anything 将生产 http://www 。主人。com/anything.

一个规则以叠代:
RewriteRule (。*?\.asp)(\?[^/]*)?/([^/]*)/([^/]*)(.*) $1(?2$2&:\?)$3=$4$5 [ NS, i ]
         

这样的规则(有N 或NS 旗子) 不能被模仿在正则表达式测试 工具整体上。 但是它能逐步被模仿。 最初地规则能是 splitted 入a 样式 并且 格式 和在早先样品。 然后在一 跨步一些 测试串 能是在导致一些条件下 格式结果. 这 格式结果 如果被采取作为a 测试串 在第二步, 等。


特点历史
ISAPI_Rewrite 版本2 。8 修造57:
增加的能力再试岗位和投入请求当认证 反对proxied 服务器要求。 这是替换对固定被介绍在修造54 哪些未盖所有可能的案件。
更新 认证计划可利用为代理人 部分。
增加 Add 认证倒栽跳水旗子为 RewriteProxy 方针.
更新 允许要求跑ISAPI_Rewrite 部分。
用助力1 修造。33.1.
ISAPI_Rewrite 版本2 。8 修造56:
改变"保存 Host "旗子逻辑保存主人倒栽跳水的主机名和口岸 (唯一主机名被保存了在早先修造) 。
ISAPI_Rewrite 版本2 。8 修造55:
授权倒栽跳水固定的不正确撤除从代理人subrequest 当明确代理人 认证不使能。
ISAPI_Rewrite 版本2 。8 修造54:
固定的"再寄您的请求" 错误当0N 投稿通过代理人对服务器要求 联合认证。
增加的描述 认证计划可利用为代理人.
增加的H 旗子(保存主人) 对 RewriteProxy 方针.
增加 压制错误细节 选择为 代理人.
用助力1 修造。33.
ISAPI_Rewrite Beta 版2 。7 修造53 狐狸x64 和Itanium:
Beta x64 和ISAPI_Rewrite 的Itanium 版本充分。
ISAPI_Rewrite 版本2 。7 修造53:
固定的打破的NS 旗子支持在Lite 和ISA 版本。
ISAPI_Rewrite 版本2 。7 修造52:
固定的臭虫与转移内码倒栽跳水在代理人反应被介绍在修造51 。
ISAPI_Rewrite 版本2 。7 修造51:
执照钥匙改变了! 新执照钥匙有格式AAAAA-BBBBB-CCCCC-DDDDD 。
如果您有老钥匙为ISAPI_Rewrite 2 。x 请参观 这页 更新您的钥匙。
固定的IIS 终止当试验到期了。
ISAPI_Rewrite 为ISA 2004 被发布。
二连接倒栽跳水的插入的固定的可能性入代理人反应。
ISAPI_Rewrite 版本2 。7 修造50 (内部):
被创造的ISAPI_Rewrite 为ISA 2004 年。
增加的NS 旗子(同样规则的重覆) 对RewriteRule 和RewriteHeader 。
ISAPI_Rewrite 版本2 。6 修造49:
固定不正确解析规则包含选择没有附寄托架在情况
ISAPI_Rewrite 版本2 。6 修造48:
增加的CL (案件低) 并且CU (案件鞋帮) 旗子对RewriteRule 和RewriteHeader
编写以助力1 。32
ISAPI_Rewrite 版本2 。5 修造47:
固定的可能的代理人崩溃由于WinHTTP 臭虫。
ISAPI_Rewrite 版本2 。5 修造46:
固定的可能的代理人崩溃在新式被禁止(退化) 。
改善改和禁止RFC 服从方向。
ISAPI_Rewrite 版本2 。5 修造45:
固定的臭虫以DisableRewrite 方针被介绍在修造44 。
ISAPI_Rewrite 版本2 。5 修造44:
被减少的记忆消耗量由处理执行过滤器。
增加的先进错误采伐对设施。
"帮手URL" 参量的固定的不正确装货从登记 在配置程序。
ISAPI_Rewrite 版本2 。5 修造43:
代理人模块将改变3xx 对点的反应地点倒栽跳水到proxying 服务器如果它最初指向a proxied 服务器。
固定的记忆泄漏和WinHTTP 把柄漏在代理人模块在反应暂停的情况下。
增加的描述 允许要求跑ISAPI_Rewrite 对 文献。
ISAPI_Rewrite 版本2 。4 修造42:
有不正确WinHTTP 暂停的固定的问题设置为一个请求在代理人模块。
ISAPI_Rewrite 版本2 。4 修造41:
有长的询问串的固定的问题在代理人模块。
ISAPI_Rewrite 版本2 。3 修造39:
被合并的Regex++ 固定为非贪婪的样式。
ISAPI_Rewrite 版本2 。3 修造38:
编写与新Regex 图书馆从助力1 。31.0. 匹配的速度极大增加了。
固定的RXTest 公共崩溃在"病理性" 正则表达式。
ISAPI_Rewrite 版本2 。3 修造37:
有老牌HTTPS 的固定的问题改方向和禁止。
ISAPI_Rewrite 版本2 。2 修造32:
增加的永久改[ RP 方向] 旗子对RewriteRule/RewriteHeader 方针
增加的可能性配置连接, 送和接受暂停为代理人模块通过 配置程序。
ISAPI_Rewrite 版本2 。2 修造30:
代理人模块被再设计和被重写使用IIS 的异步I/O 作用。
螺纹合并战略被改变了:
"螺纹产生物门限" 参量用2 个新参量替换 - "工作者穿线极限" 并且"激活穿线极限" 。
增加的可能性对自动地固定注册钥匙由Outlook 打破对配置 公共事业。
代理人模块使用WinHTTP 5 。1.
ISAPI_Rewrite 版本2 。1 修造28:
解决了几个问题与一个新安全系统有关:
"对存储单元的无效通入" 在代理人模块。
一些每站点configs 不能运作。
过滤器不能运转当安装在站点水平。
手工产品设施的增加的可能性。
代理人模块现在退回更加友好的错误信息。
ISAPI_Rewrite 版本2 。1 修造24:
行动向新试验安全系统。 修理了几个臭虫以试验检查。
新方向性RewriteProxy 带来更加灵活的代理人特点。
固定的臭虫与EnableRewrite/DisableRewrite 。
代理人模块现在送改对客户的反应方向。
修理了几个臭虫在文献。
ISAPI_Rewrite 版本2 。0.1 修造22:
增加的剧本为手工代理人模块注册在剧本映射(充分 版本唯一) 。 看入 配置程序 部分为细节。
增加方向性RFStyle 为控制改方向的新设置并且禁止 反应样式(充分的版本唯一) 。 改方向并且现在禁止能是 发布以与在1 相似的方式。3 (老牌) 或用方式2 。0 (新样式) 。 缺省是一个老方式。
ISAPI_Rewrite 版本2 。0 修造21:
被改变的"病理性" 规则保护。 未通过的规则不是残疾的 再。
ISAPI_Rewrite 版本2 。0 修造20:
现在ISAPI_Rewrite 支持代理人生产量。 使用[ P ] 旗子在RewriteRule 或RewriteHeader 方针对代理人请求。 检查 配置 公共事业 文献的部分为代理人模块的细节 配置。
新方针可能使用使能的EnableRewrite 和DisableRewrite 或功能失效分开地重写全球性地或为各个站点。
新方针EnableConfig 和DisableConfig 意欲使能或失去能力 站点平实配置为一个选择的站点。
ISAPI_Rewrite 充分现在有一个试用期。
新帮手ISAPI 引伸意欲为proxying, 改方向服务和 阻拦请求。
使用新Regex++ 版本从助力1 。29.0 以更多臭虫固定和新 特点。
ISAPI_Rewrite 版本1 。3 修造16:
介绍了对Regex++ 正则表达式引擎的一些修改 克服有"病理性" 规则的一个问题需要指数时间 为处理。 现在计时处理一个唯一规则对一半第二被限制。 如果规则不完成在这时间处理结束和ISAPI_Rewrite 寄发"500 内部服务器错误" 到客户表明配置 错误。
增加的新 N (下面) 旗子对RewriteRule 和RewriteHeader 方针。 它使成为可能组织圈当处理统治。
增加 RepeatLimit 方针限制数量的可能 圈。
增加 F (被禁止的) 旗子对RewriteRule 和RewriteHeader 方针。 它力量送403 对客户的被禁止的反应如果正面 比赛被查出。
增加 O (正常化) 旗子对RewriteRule, RewriteHeader 并且RewriteCond 方针。 它指出, 被检查的串首先应该 正常化(i.e 。 URL 内码、非法字符, 等被去除) 。
增加了一种可能性来检查ServerVariables 以RewriteCond 方针。 它能做使用%ServerVariable 代替倒栽跳水名字。
改善的配置解析处理错误采伐。 现在错误信息 包含行号。
ISAPI_Rewrite 版本1 。2 修造14 (充分的版本唯一):
解决了问题被介绍在充分的版本1 。1 修造11 。 配置 旗子CacheClockRate 不正确地被解析了。 并且在第一贮藏所清洁以后 inetinfo 。exe 过程开始消耗99% Cpu-time 。
ISAPI_Rewrite 版本1 。2 修造13:
增加的新旗子 U (Unmangle 日志) 。 现在ISAPI_Rewrite 罐头 日志URL 照原样最初被请求了。
ISAPI_Rewrite 版本1 。1 修造11:
解决了有配置的最后字符的截的一个问题 文件。
固定了几个缺点以文献和默认配置 文件。
包括的另外的优化为互联网信息服务器6 。0.
ISAPI_Rewrite 现在增加习惯倒栽跳水以原始的URL 信息来 客户请求, 因此原始的URL 可能被检索在服务器剧本。
新 RewriteHeader 方针现在准许不仅重写 客户请求的URL 零件, 但其他HTTP 倒栽跳水甚至方法 并且版本信息。

相关主题: