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 端几乎没什么可干预的。但如果利用通道连接的另一端的程序 ,也要自己
问题内容: 我试图在过滤器中将压缩文件的内容类型设置为正确的mime类型,而不是application / gzip。这是我的一些代码: 输出: 在浏览器中,我看到正确设置为,但仍为。似乎正在重置内容类型。 知道如何永久重置内容类型吗? 我没有其他过滤器。 问题答案: 我借助以下答案解决了它: 然后将我上面的代码更改为: 它不是一个很好的解决方法,但它可以工作。