ISAPI_Rewrite中文手册

 

 

安装和反安装

 

 


2.1系统要求

ISAPI_Rewrite可以被安装在下列操作系统中:

Ÿ   Windows 2000 with IIS 5

Ÿ   Windows XP with IIS 5.1

Ÿ   Windows Server 2003 with IIS 6.0

Ÿ   Windows Vista with IIS 7.0

Ÿ   Windows Server 2008 with IIS 7.0

在安装ISAPI_Rewrite之前,操作系统中必须先安装IIS。

32位和64位的Windows版本都是支持的,但是你必须下载32位版和64位版两种不同的安装包。Windows Installer 2.0必须运行安装程序。你可以从微软的网站上下载到最新版本的Windows Installer。

在Windows Vista和Windows Server 2008上安装ISAPI_Rewrite,还必须先安装下面两个模块(默认情况下这两个模块是不安装的)

Ÿ   ISAPI过滤器  

Ÿ   ISAPI 扩展

2.2安装程序

在运行安装包之前请先阅读系统要求部分。下载并安装某个版本的ISAPI_Rewrite.msi,依照安装向导的说明操作。安装过程是自动的,并有自我描述。ISAPI_Rewrite在自动安装过程中必须重启IIS。下列服务必须被重启:IISADMIN、W3SVC。不需要手工把任何ISAPI筛选器或者扩展加入到网站或者全局列表中。它能够在安装和配置过程中自动完成。

命令行安装

ISAPI_Rewrite也能够通过命令行进行后台安装。请使用以下命令行语法来安装:

msiexec /i ISAPI_Rewrite3.msi /qn AcceptEULA=Yes REGISTRATIONCODE=Code REGISTRATIO

NNAME=Name

用命令行来后台反安装ISAPI_Rewrite请使用下面的语法:

msiexec /x ISAPI_Rewrite3.msi /qn KEEPUSERFILES=Yes

2.3手工安装

要手工安装ISAPI_Rewrite的话,你必须下载不同的手工安装包包含所有必须的文件。ISAPI_Rewrite精简版不支持手工安装。你可以安装全部功能或者仅仅安装它们中的一部分。

手工安装包包含下列文件:

Ÿ   ISAPI_Rewrite.dll - 这是ISAPI筛选器本身。

Ÿ   ISAPI_RewriteProxy.dll - 这是为代理操作的ISAPI扩展模块必不可少的。

Ÿ   license.rtf - EULA的产品许可证。

Ÿ   ISAPI_Rewrite.chm - .文档文件。

Ÿ   httpd.conf - 全局配置文件示例。

安装ISAPI_Rewrite,首先你必须在你在IIS系统中注册ISAPI_Rewrite.dll作为ISAPI筛选器。按默认ISAPI_Rewrite.dll文件是用来作为全局ISAPI筛选器的。而且它还能够被安装到某个特定的网站里,你需要记住在同一时间段里只有一个ISAPI_Rewrite.dll实例能够加载到一个IIS工作进程里,这意味着如果你决定把ISAPI_Rewrite的ISAPI筛选器单独地安装到每个站点里的话,你必须把这些站点切换高隔离模式,从而为这些网站产生独立的工作进程。如果你需要在每个站点上分别安装ISAPI_Rewrite,我们通常会建议改为在整个IIS上全局地安装它。

在Window 2000,Window XP 和Windows Server 2003中注册ISAPI 筛选器,无论是整个IIS服务器要用它还是个别WEB网站要用它,都要用IIS 的MMC管理单元来把ISAPI_Rewrite.dll添到ISAPI筛选器列表。在Windows Vista和Windows Server 2008中首先你需要安装可选IIS组件:万维网服务、应用程序开发功能、ISAPI筛选器。

如果你需要代理服务器功能,你还需要将ISAPI_RewriteProxy.dll注册为ISAPI扩展来侍服文件扩展名“*. rwhlp”。在不同的IIS版本中要求不同的操作。请参阅你管理的IIS版本的文档来了解如何注册一个新的ISAPI扩展并把它映射到IIS系统的文件扩展名上。在Windows Vista和windows server 2008首先必须安装可选的IIS组件:万组网服务、应用程序开发功能、ISAPI筛选器。使用短路径名(8.3模式)作为ISAPI_RewriteProxy.dll的模块路径,如果路径里有一个空格字符,IIS载入这个模块时将失败。

把httpd.conf文件放在ISAPI_Rewrite.dll文件的同一目录下并编辑它。

把下列两行内容放到httpd.conf文件中以注册ISAPI_Rewrite 产品:

RegistrationName=Your registration name

RegistrationCode=REG-CODE-PROVIDED-FROM-HELICON

依照“运行ISAPI_Rewrite的权限需求”这一部分的说明来检查文件系统权限。

2.4反安装

反安装程序会删除所有安装程序所生成的文件、从管理元库中注销筛选器,并删除所有由安装程序所添加的其它管理元库变化。如果用户决定在反安装过程中保留用户文件的话,下列用户数据文件在反安装后会被留下来。

文件名

说明

Program Files/Helicon/ISAPI_Rewrite/httpd.conf

用户规则的主配置文件

Program Files/Helicon/ISAPI_Rewrite/error.log

包含错误日志的文件

Program Files/Helicon/ISAPI_Rewrite/rewrite.log

包含重写日志的文件

.htaccess (various folders)

用户创建的含有规则的配置文件

“删除用户创建的文件”的选项在将反安装过程中提供给用户。如果启用这个选项则卸载程序也将删除位于Program Files文件夹里用户创建的文件。 .htaccess文件不会被删除。

要用命令行后台卸载ISAPI_Rewrite,请使用下面的语法:

msiexec /x ISAPI_Rewrite3.msi /qn KEEPUSERFILES=Yes


2.5运行ISAPI_Rewrite的权限需求

在一个干净的默认Windows系统上自动安装ISAPI_Rewrite不要求任何权限调整。但是一些其它产品比如说Plesk、IIS锁定工具的安装,等等,可能收紧服务器的安全性,并妨碍ISAPI_Rewrite的正常运行。下面是ISAPI_Rewrite的权限需求的列表单子:

在Windows 2000、Windows XP和Windows 2003的IIS5兼容模式下,筛选器运行在System帐户下的inetinfo.exe进程中。那个system帐户至少得被授予放置ISAPI_Rewrite安装文件的那个文件夹的“读取”和“目录浏览”的权限。我们还建议给予system帐号对这个文件夹的一般修改权。这将允许生成一些包含解析或者其它错误的文件。system帐号还必须在任何包含了.htaccess文件的网站文件夹里同样被授予这些权限,否则ISAPI_Rewrite将不能加载并监视它。

请稍留意ISAPI_Rewrite安装目录上的任何一点拒绝权限设置,因为在Windows 操作系统中,拒绝权限优先于任何允许权限记录。

在Windows 2003的天然IIS模式(WPI模式)以及Windows Server 2008中,无论是筛选器还是代理服务都运行在每个网站相应的运行程序池的w3p.exe工作进程中,每个应用程序池都可以使用它自己的定制来配置,这可能使权限设置成了一种复杂的工作。然而,在一个正确的IIS配置中,每个使用中的定制必须是IIS_WPG组的一个成员。因此,IIS_WPG组可以被用来代替System帐号去分配前面所写的权限需求。

在Windows Vista 中权限配置是和Windows 2003的配置差不多的,只是它没有IIW_WPG组。所以,所有的WPI帐号(一般Network Service是它的惟一帐号)都必须授予上述必需权限。

此外,为了让代理服务功能能工作,你必须在网站属性或者运行代理服务的web应用程序的属性中给予一个“纯脚本”的执行权限。

 

 

使用ISAPI_Rewrite
3.1基本概念
ISAPI_Rewrite提供了一个基于规则的重写引擎能飞速重写被请求的URL。它支持几乎无限量的规则和几乎无限量的附加规则条件来提供真正灵活和有效的URL处理机制。可以根据HTTP头、服务器变量、被请求的URL本身以及其它不同的条件的测试结果来对URL作出处理。

URL数据处理是用一个文本配置文件来定制的,内含各种指令设置。配置分几种等级。首先是全局(服务器范围的)配置指令,放置在ISAPI_Rewrite安装目录里的一个名为httpd.conf的文件里。那里还有若干个标签可以封装应用到特殊位置的指令:<VirtualHost>、<Directory>、<DirectoryMatch>、<Files>、 <FilesMatch>、<Location>以及<LocationMatch>。最后ISAPI_Rewrite支持可以放在任何网站目录里的.htaccess文件,那些文件中的规则可以应用到该位置以及它的子目录中。所有的配置文件在每次修改文件后都会被自动重载。允许用第三方程序和脚本来修改文件。

在很多情况下ISAPI_Rewrite是用来重写URL的。除了重写之外,ISAPI_REWRITE能够修改、生成、删除任何其它客户端Request中的HTTP头。模块操作可以载入改写、代理、重定向或者阻断原始客户端到服务器的请求。

Rewriting可能使服务器在得到了一个客户端的源请求时用一个新的URL继续请求处理。新的URL可以包括查询串部分(跟在问号后面),也可以指向任何一个完全的静态文件或者脚本(例如asp)、或者程序(例如.exe),等等。对用户和网站配置来说重写是彻底透明的。因为它Web应用程序收到请求之前在服务器内部执行。

Proxying使URL经过内部处理后指向另一台服务器,并很快传递到远程服务器上(换言之,规则处理在这里中止了)。远程服务器的响应很快被传回客户端。代理服务器要求你指定完整的有效URL,以协议、包括主机名开头等等。ISAPI_Rewrite使用ISAPI扩展来处理代理请求,你可以在“代理服务器配置”这一章里读到更多信息。

Redirection将发送一个带有重定向指令的即时响应(HTTP响应码为302或者说301),将网址设置为一个新的位置。您可以在重定向指令里使用绝对URL格式(这是RFC2616所要求的)将请求重定向到不同的主机、端口和协议。如果此信息被忽略, ISAPI_Rewrite将自动照当前的协议、服务器名称和目录位置提供URL。重定向指令总是导致重写引擎中止处理后面的规则序列。

每个规则按它在配置文件中出现的顺序来应用。目录级配置文件从父路径开始一个接一个地处理,来自于全局配置文件的规则最先适用。

在修改URL之前ISAPI_Rewrite会保存原URL到Http头,命名为X-Rewrite-URL。然后它能够在脚本中作为HTTP_X_REWRITE_URL服务器变量取回。因为在IIS里,系统变量名不能被修改,所以ISAPI_Rewrite不能提供与Apache兼容的变量名REQUEST_URI。如果你的应用程序的设计要依赖于REQUEST_URI变量,你必须修改它,用HTTP_X_REWRITE_URL变量来代替。下面是一个PHP代码补丁的示例:

if (isset($_SERVER['HTTP_X_REWRITE_URL']))

{

$_SERVER['REQUEST_URI'] = $_SERVER['HTTP_X_REWRITE_URL'];

}

后面跟有RewriteRule(或者RewriteProxy)指令的多重RewriteCond指令只影响单个规则。如果一些条件需要被用于多个规则,必须重复写这些条件指令以应用到每条规则上。

3.2和Apache下mod_rewrite的兼容性
这个版本的ISAPI_Rewrite是为了最大程度上保持与Apache的mod_rewrite的兼容性。这个目标已经很大程度上实现了,尽管有一些功能无法执行,因为它们和Apeach以及UNIX结构高度绑定,而且它们在IIS上执行是不敏感的。举例说明:第H条:“强制内容处理”标记不能执行,因为在IIS中内容处理的范围依赖于扩展名。或者第[NS]条:“没有子请求”标记是无意义的,因为在IIS中是没有子请求的。

这里有一个完整的ISAPI_Rewrite和mod_rewrite兼容性图表。标记为绿色的功能或指令是充分支持的,黄色的功能是部分支持或计划在下一版本中支持,标示为红色的功能是不支持的。

·   兼容Perl的正则表达式 (plus extended syntax)

·   服务器级httpd.conf配置

·   虚拟网站.htaccess配置文件

·   目录.htaccess配置文件

·   <VirtualHost>

·   <Directory>

·   <DirectoryMatch>

·   <Files>

·   <FilesMatch>

·   <Location>

·   <LocationMatch>

·   AccessFileName

·   RewriteEngine

·   RewriteRule

o  $N 规则后向引用

o  %N RewriteCond 后向引用

o  ${mapname:key|default}

o  %{VARNAME} 服务器变量

o  '!' 取非

o  [C] 与下一个规则联锁

o  [CO=name:val:domain:lifetime:path] 设置cookie

o  [E=var:val] 设置环境变量

o  [F] 强制禁止应答

o  [G] 强制继续应答

o  [H=content-handler] 明确的内容处理 (不适用)

o  [L] 上一个规则标记

o  [N] 再次应用规则

o  [NC] 大小写不敏感

o  [NE] 不转义输出

o  [NS]非内部子请求

o  [P]代理通过

o  [PT] 传递通过下一个处理程序 (一直开启)

o  [QSA] 追加查询字符串

o  [R =code] 重定向

o  [S=num] 跳到下面第 n 条规则

o  [T=MIME-type] 强制明确应答 MIME 类型

·   RewriteCond

o  [NC] 大小写不敏感

o  [OR] 逻辑并集

o  %{HTTP:header}

o  '!' 非

o  '<CondPattern' 大于比较符

o  '>CondPattern' 小于比较符 

o  '=CondPattern' 等于比较符

o  '-d' 目录存在

o  '-f' 文件存在

o  '-s' 非零文件

o  '-l' 符号链接

o  '-x' 有可执行权限的文件

o  '-F' 通过子请求文件存在

o  '-U' 通过子请求URL存在

·   RewriteBase

·   RewriteMap

o  txt: 文本映射

o  rnd: 随机映射

o  int: 内部函数 toupper, tolower, escape, unescape

o  prg: 外部程序

o  dbm: 散列文件

·   RewriteLog

·   RewriteLogLevel

·   RewriteOptions

·   RewriteLock

·   AllowOverride

3.3使用环境以及处理顺序
以下是这个程序文档中要被用到的使用环境的详解:

server config

这个标志表示该指令可以用在全局httpd.conf配置文件中,但是不能用在任何一个分区(例如<Virtualhost>或者<Directory>)内部。它不允许放在.htaccess文件中。

vitrual host

这意味着指令可以出现在<VirtualHost>容器内。

directory

这个标志表示指令在<Diretory>、<Location>、<Files>容器内可用,而且它们的正则表达式是等价的。

.htaccess

使用环境标为它的指令可以出现在每个目录的.htaccess文件中。 记住当RewriteRule指令用在.htaccess配置文件中时,它将自动从路径中剥去本地目录前缀,只对剩下的部分应用规则。你可以使用RewriteBase指令显式地给这些规则指定一个基本路径。

应用次序

当同一分区内的多条指令同时适用时,理解每个分区应用的次序是很重要的,因为它会对最终效果起作用。应用次序如下所述:

1.<Directory>(正则表达式除外):多个<Directory>分区可以应用于单个请求,如果多个(非正则表达式)<Directory>分区匹配了包含文档的这个目录(或者它的上级目录中的一个),则按照从短到长的匹配次序应用指令。

2..htaccess文件按父目录到子目录的顺序应用。

3.<Files>和<FileMatch>同时被执行。

4.<Location>和<LocationMatch>也同时被执行。

先应用虚拟主机外面定义的相应分区和指令,再应用<VirtualHost>分区中的分区和指令。同一时间只有一个<VirtualHost>分区可以应用给请求。较晚的分区优先于较早的那些。

 

此条目发表在article分类目录,贴了标签。将固定链接加入收藏夹。