当前位置: 首页 > 软件库 > 服务器软件 > HTTP服务器 >

Ionic's Isapi Rewrite Filter

URL重写过滤器
授权协议 MS-PL
开发语言 C/C++
所属分类 服务器软件、 HTTP服务器
软件类型 开源软件
地区 不详
投 递 者 楚天宇
操作系统 Windows
开源组织
适用人群 未知
 软件概览

IIRF(Ionic's Isapi Rewrite Filter)是一款开源的重写URL过滤器,类似于Apache的URL重写,基于VC8.0(可以用Visual Studio2005或Visual C++ 2005 Express重新编译)开发。

它可以运行在IIS5.0至IIS7.0,支持ASP,ASP.NET(ASPX),PHP等许多格式。相对比ASP.NET2.0自带的URL重写,具有更好的性能和许多我们所需要特性,重要的一点在于:它可以支持无扩展名的URL(例如:www.x2009.net/****,你无需在创建一个默认的default.aspx文件,IIRF自动会帮你解析),让URL更加的方便我们记忆,也能进一步提高搜索的排名?IIRF能够在aspnet_isapi提前捕获我们所请求的URL进行处理,如果我们访问www.x2009.net/a.aspx,需要获取www.x2009.net/a.htm,步骤需要(iis-aspnet_isapi),通过IIRF,我们可以直接跳aspnet_isapi.dll,直接访问a.htm,要知道,这种方式在ASP.NET是无法实现的。

IIRF跟ASP.NET重写URL一样,它也是基于正则的方式来匹配,具有LOG记录,请求的条件判断。还是进入正题吧。

安装

IIRF安装需要我们手动操作来完成。不过。也是很方便了。

1 将IsapiRewrite4.dll, IsapiRewrite4.ini复制到c:\windows\system32\inetsrv(你也可以复制到其它适当的文件夹下面)。

IsapiRewrite4.ini是IIRF配置文件,每次该文件更改之后,IIRF会自动重新加载该文件,无需重启IIS来重新加载配置,如果您修改后INI文件后格式不正确,IIRF将会自动获取最后正确加载的配置文件。

2 打开IIS管理器,选择“默认网站”,右击“属性”,选择“ISAPI筛选器”,点击“添加”,输入筛选器名称:Ionic Rewriter,可执行文件选择上面复制到c:\windows\system32\inetsrv下面的IsapiRewrite4.dll文件,点“确定”。

3重启IISADMIN service服务。(在计算机管理----windows服务里面)

4 完成。

日志IIRF能够将INI配置文件加载,用户的URL请求记录都会保存到指定的日志文件里。因为它具有很大的性能开销,因此建议将它日志的记录等级设为0,只有



为了方便调试的时候时候,可以设置为5,

RewriteLog 保存的日志路径,如 c:\temp\iirfLog.out

RewriteLogLevel {0,1,2,3,4,5} 日志的等级,默认值为0

0 –不会记录日志

1- 少许的日志

2- 比较多的日志

3- 比较详细的日志

4- 详细的日志(4),并会跟踪server variable和替换的字符串。

5- 详细的日志(5),包括日志文件更改的事件,建议方便调试的时候使用

正则

正则的语法跟.NET一样,只不过是格式不一样而已。

格式

RewriteRule []

url-pattern:匹配的正则表达式(必需)

replacement-string:要替换的字符串(必需)

modifiers:有关对RewriteRule的操作标记。可选选项。在下面我会说明

默认下IIRF的url-pattern,replacement-string正则的前面已经带了主机头的。

为了方便描述,直接看几个示例(以下示例基本全部来源IIRF文档)

RewriteRule ^/original/(.*).php /modified/$1.aspx

源:http://www.x2009.net/original/index.php

目标:http://www.x2009.net/modified/index.aspx

RewriteRule ^/dinoch/album/([^/]+)/([^/]+).(jpg|JPG|PNG) /chiesa/pics.aspx?d=$1&p=$2.$3

源:http://www.x2009.net/dinoch/album/30/1.jpg

目标:http://www.x2009.net/chiesa/pics.aspx?d=30&p=1.jpg

比较简单,主要还在于modifiers的功能。下面列举了它的所有值,允许组合(如[R,L])。

R = Redirect(URL跳转到地址)

NF = Not found(返回404错误给用户,但该文件并未移除,还是保留在网站中)

L = Last test if match(如果已经匹配,将不在继续匹配下去)

F = Forbidden(跟NF标志相似,)

I = Do case-insensitive matching

U = Store original url in server Variable HTTP_X_REWRITE_URL(保存原始的url到HTTP_X_REWRITE_URL服务器变量中。)

[R] or [R=code]

就像跟我们在ASP.NET使用的Redirect方法一样,重新改变浏览器的方向,跳转到新的指定的URL中。

[R=code]允许我们指定特定的HTTP状态返回码。只能介于301到399。如果超出这个范围。默认会是使用302状态。

RewriteRule ^/goto.aspx?r=(.*)$ $1 [R]

源:http://www.x2009.net/goto.aspx?r=http://www.google.com/

目标:http://www.google.com

[L]

上面已经简单介绍过。不在说明

[NF]

上面已经简单介绍过。它还可以跟RewriteCond一起配合,来实现自定义的404错误请求。

特别要注意,你所要匹配的文件必须存在,替换的字符串不允许是存在文件名

RewriteRule ^/1008.aspx$ /1.aspx [NF]

1008.aspx文件需要存在,1.aspx不存在,否则无法正常达到我们的结果。

(很奇怪,我不知道是不是我搞错了。但我最终测试的结果确实是这样,文档也没详细说明过,有知道的朋友可以告诉我一下原因)

[F]

不在说明。

[I]

模糊匹配

[U]

保存原始的url到HTTP_X_REWRITE_URL服务器变量中。

在ASP.NET你可以用Request.ServerVariables["HTTP_X_REWRITE_URL"]获取原始值。

RewriteCond

RewriteCond []

类似于条件判断,并且允许多个条件,OR,AND。只有当RewriteCond的Server Variable 匹配所指定的正则表达,RewriteRule才会执行。比如:

RewriteCond %{REMOTE_ADDR} ^(127.0.0.1)$

RewriteRule ^/(.*).aspx$ /$1.aspx

如果我们访问网站的地址的IP来源于127.0.0.1,那么,允许 RewriteRule ^/(.*).aspx$ /$1.aspx

RewriteCond %{REMOTE_ADDR} ^(127.0.0.1)$ [OR]

RewriteCond %{REMOTE_ADDR} ^(192.168.0.10)$

RewriteRule ^/(.*).aspx$ /$1.aspx

添加了OR来多个条件判断

RewriteCond %{REMOTE_ADDR} ^(?!127.0.0.1)([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})(.*)$

RewriteRule ^/(?!redirected.htm)(.*)$ /redirected.htm

Modifier flags有二个值

I=模糊匹配

OR=逻辑判断

从IIRF的RewriteCond的功能上来说,确实很灵活,不知道跟IIS7的重写怎么样,嘻嘻。还没瞧见过呢*^_&。另外。RewriteCond的[Patterns]可以带下面几个参数

-d

Treats the TestString as a pathname and tests if it exists,

and is a directory.

TestString是一个路径名称,并且存在这个路径

-f

Treats the TestString as a pathname and tests if it exists and

is a regular file.

TestString是一个路径名称,并且是一个存在的文件

-s

Treats the TestString as a pathname and tests if it exists and

is a regular file with size greater than zero.

TestString 是一个路径名称,并且存在文件超过0字节

如文档所使用的例子

(1)RewriteCond %{HTTP_URL} (/|\.htm|\.php|\.html|/[^.]*)$ [I] )

(2)RewriteCond %{REQUEST_FILENAME} !-f

(3)RewriteCond %{REQUEST_FILENAME} !-d
(4)RewriteRule ^.*$ /index.aspx [U,L]

(1)如果URL是以htm,php,html(模糊匹配),

(2)URL不是存在文件

(3)URL不是请求的路径

(4)将所有请求跳转到index.aspx,保存原始的URL,之后不在对此进行匹配

在如

RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*

RewriteRule ^/$ /homepage.max.html [L]

IIRF其它配置属性

IterationLimit {integer}从指定的integer后开始匹配RewriteRule组。如果超出RewriteRule个数,默认将会从第8个开始。

MaxMatchCount {integer} RewriteRule组的总个数。

RewriteLog 日志路径

RewriteLogLevel {0,1,2,3,4,5} 日志的等级

  • Product overview ISAPI_Rewrite is a powerful URL manipulation engine based on regular expressions. It acts mostly like Apache's mod_Rewrite, but is designed specifically for Microsoft's Internet Infor

  • 问题描述:要在一个Web站点上实现二级域名Url的重写。例如:http://abc.company.com 重写到 http://company.com/usersite.asp?sitename=abc 其中abc二级域名不定,根据用户申请的名字来决定。服务器上有一个DNS服务。可以吧*.compay.com所有二级域名正确解析到company.com。经过重写后。浏览器中的地址是http://

  • ISAPI_Rewrite 1.3 DocumentationIntroduction What's new Main concept Lite version limitation Special notes for the IIS6 Configuration Configuration file format CacheClockRate directive RepeatLimit dire

  • 正则 正则的语法跟.NET一样,只不过是格式不一样而已。所以我也不在详细介绍。具体有关正则的说明大家可以用GOOGLE搜索。 格式: RewriteRule <url-pattern> <replacement-string>   [<modifiers>] url-pattern:匹配的正则表达式(必需) replacement-string:要替换的字符串(必需) modifiers:有关对R

  •  ISAPI_Rewrite是一个强大的基于正则表达式的URL处理引擎。它非常类似于Apache's mod_Rewrite,但它是专为IIS设计的。     ISAPI_Rewrite有两个版本:ISAPI_Rewrite Full与ISAPI_Rewrite Lite。     ISAPI_Rewrite Lite是免费版本,但不支持反向代理功能。     ISAPI_Rewrite Full

  •   第一。首先到官方网站下载ISAPI_Rewrite 我的机子是32位的就下32位免费版的,链接地址如下: http://www.helicontech.com/download/isapi_rewrite/ISAPI_Rewrite3_0064_Lite.msi 可以选择不同版本:http://www.helicontech.com/download.asp 第二:安装 安装ISAPI_Rew

  •                                                                     IIS ISAPI Filter 开发 Filter的开发,最快的方式当然是参考MSDN的资料,毕竟是Microsoft的东西,还是看他自家的资料比较稳妥。 在这个目录中,能够找到Microsoft对IIS开发的详细说明和例子。 Web Development  

  • ISAPI Rewrite 配置简介: 在NT/2000/XP和2003平台上,ISAPI Rewrite在系统帐户下射入INETINFO进程与 IIS 以共存模式过滤器运行。所以系统帐户应该给予对ISAPI- REWIRITE DLLS Internet匿名访问组 可读可执行权限 和所有的 HTTPD。INI 文件可读权限,还应该给予系统帐户对于所有包括 HTTPD。INI 文件的文件夹的可写权

  • URL重写可以把动态页面变成静态页面(搜索引擎优化),当然还有其他作用,譬如将外部访问mdb数据库文件的页面重写到指向404页面等等. "Apache的 mod_rewrite是提供了强大URL操作的杀手级的模块,可以实现几乎所有你梦想的URL操作类型,其代价是你必须接受其复杂性,因为mod_rewrite的主要障碍就是初学者不容易理解和运用,即使是Apache专家有时也会发掘出mod_rewri

  • .htaccess文件的内容如下: RewriteCond %{HTTP_HOST} ask.xxoo.com RewriteRule ^(index.html)?$ /ask/ RewriteRule ^(.*)list-([0-9]+)-([a-z]+)\.html$ $1/ask/list.php?catid=$2&action=$3 RewriteRule ^(.*)show-([0-9]

  • 对SEO的追求有点强迫的症状了。于是用上了ISAPI Rewrite,ISAPI_Rewrite是一个强大的基于正则表达式的URL处理引擎,我安装的是官方的ISAPI_Rewrite3_0058_Lite.msi 免费版。免费版与收费版的主要区别是:“No support for distributed .htaccess configurations, directory and web sit

  •   ISAPI_Rewrite有Full和Lite两个版本。Full是商业版,Lite是免费版。 经过反复测试,发现Lite版只读取安装目录下的httpd.ini文件,而不会读取每个网站根目录下的httpd.ini。 只有Full版才会读取网站根目录下的httpd.ini配置。 刚才到官网上仔细查了Lite版的介绍,才发现原来官网上早已说明,只是我以前没有发现而已。 为了方便其他朋友区分Lite版

  •   function SplitString(Source,ch: String): TStringList;   var     temp:String;     i:Integer;   begin     Result:=TStringList.Create;     if Source = '' then Exit;     temp := Source;     i := pos(ch,

  • 如果你的虚拟空间支持 rewrite,那么你将拥有多个网站,请看下面的配置 % q. t7 e# e) Z6 a9 MEmulating host-header-based virtual sites on a single site # R: S: q0 s5 y5 Z+ X' N例如你在两个域名 注册 www.site1.com 和 www.site2.com,现在你可以创建两个不同的站点而使

  • 利用isapi_rewrite可以实现类似于Apache的伪静态路径,利用其检查refer的功能我们还可以实现防盗链。该软件可以在 http://www.helicontech.com/download/下载,是一个共享软件,但是有一个LITE版本是免费的,基本上可以实现我们需要的功能。安装的步骤我就不详细说了,具体说说httpd.ini的设置。 首先,必须要保证httpd.ini有可写权限,设置

  • ISAPI_Rewrite的了解太少了,有很多用上了都不知道是什么作用的,晕S一片... google一下找了几篇说得详细的,先记录下来吧... ISAPI_Rewrite 规则对大小写敏感,偶google了大半天,终于知道如何忽略大小写了 I (ignore case)不管大小写强行指定字符匹配 例:RewriteRule /code/project/([0-9,a-z]*).html /sof

  • 伪静态地址中出现中文字符时,规则写法如下:   RewriteRule /tag/(.*)/ /tag.asp?mz=$1 [N,I,L,O] RewriteRule /tag/(.*)/index_(/d+)/.html /tag.asp?mz=$1&page=$2 [N,I,L,O]   ————————————————————————————————————————————   ISAPI_

  • isPropertyAvailable和isEmpty的使用场景-原创       isPropertyAvailable和isNotEmpty 这个两个属性非常有用 isPropertyAvailable:入参有这个属性 isNotEmpty:入参的这个属性不为空 入参一般是一个封装了数据的DTO 如果希望一个属性无论为何值都符合条件则使用isPropertyAvailable 如果希望一个属性

 相关资料
  • Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。 可以将一个或多个 Servlet 过滤器附加到一个 Servlet 或一组 Servlet。Servlet 过滤器也可以附加到 JavaServer Pages (JSP) 文件和 HTML 页面。调用 Servlet 前调用所有附加的 Servlet 过滤器。 Servlet 过滤器是可用于 Servlet

  • 问题内容: 我正在尝试搜索数据库,并能够使用大写/小写过滤器术语,但是我注意到在应用分析器时,我不知道如何在过滤后的搜索中应用小写分析器。这是查询: 我有一个小写的类型: 以及相应的映射: 问题答案: 问题是您在索引期间分析了一个字段以使其小写,但您正在对未分析的查询使用术语过滤器: 术语过滤器 筛选具有包含术语(未分析)的字段的文档。与术语查询类似,不同之处在于它充当过滤器。 http://ww

  • 我所拥有的 预期产出 实际产量 这只是一个例子。在我的真实代码中,我正在对我的全局状态(useContext, useReduer)执行删除操作。 是一个ID数组。

  • 问题内容: 有没有办法只处理过滤器中的响应。 下面编写的代码是否正确? 问题答案: 这取决于您想要什么。通常,您的样本虽然不正确。之后chain.doFilter又回来了,这是来不及做的任何回应。此时,整个响应已发送到客户端,您的代码无法访问它。 您需要做的是包装request和/或包装response到您自己的类中,将这些包装传递给doFilter方法,并处理包装中的所有处理。 为了使其更容易,

  • 问题内容: 我正在尝试使用多个过滤器+自定义过滤器功能过滤列表。 最初工作的jsfiddle示例是http://jsfiddle.net/ed9A2/1/,但现在我想更改年龄过滤的方式。 我想添加一个自定义过滤器,以使其 年龄 基于两个输入值 min_age 和 max_age (在年龄之间)进行过滤。 在研究文档之后。我发现有人有类似的问题,用户Mark Rajcok回答了http://docs

  • 本文向大家介绍使用vue手写一个过滤器相关面试题,主要包含被问及使用vue手写一个过滤器时的应答技巧和注意事项,需要的朋友参考一下 全局过滤器 Vue.filter('addHobby',(val,hobby)=>{ return val + hobby }) 局部过滤器 filters:{ addHobby(val,hobby){ return val + hobby } }

  • 9.1 用外部语言写过滤器 9.1.1 混合编程场景介绍 本章来讨论 VimL 与其他语言混合编程的话题。这“混合”编程可能不是很准确的定义,也 许涉及不同层面的场景应用。在上一章介绍的异步编程也算是其中一种吧。不过如果所调 用的外部程序是别人已经写好的(或者是系统提供的经典工具),那用户就只能适应其提 供的接口或输出,在 vim 端几乎没什么可干预的。但如果利用通道连接的另一端的程序 ,也要自己

  • 过滤程序是 UNIX® 中一种常见的应用程序, 它从标准输入 stdin 读入数据, 然后进行相关处理, 最后将结果写到标准输出 stdout。 在本节中, 我们将编写一个简单的过滤程序, 从而学习如何从标准输入 stdin 和标准输出 stdout 进行读写。 这个过滤程序将按字节把输入转换成16进制的数字, 并在每个数字的后面添加一个空格。 %include 'system.inc'