Ionic’s Isapi Rewrite Filter(IIRF)配置以及示例
鄙视那些老是破解别人组件的人,而且win上用的比较多的是ISAPI_REWRITE组件,功能不及开源免费的IIRF。
Ionic’s Isapi Rewrite Filter 就是一款就可以实现ISAPI Rewrite相同的功能并且又是免费的,简称:IIRF。下面就对此做初步介绍。
Ionic’s Isapi Rewrite Filter 官方网站:http://iirf.codeplex.com
下载地址:http://iirf.codeplex.com/releases/view/14394
官方使用在线帮助手册:http://cheeso.members.winisp.net/Iirf20Help/frames.htm
IIRF文件下载
将下载下来的文件解压,只要找到bin目录下的iirf.dll文件即可,其他文件都是没有太大用处的,找到这个文件后将其复制到一个合适的目录,我的目的就是多个网站都用这一个dll,所以我将它放置在一个自己整理的服务应用文件夹内;确保该文件夹IIS_WPG或者IUSR_XXX之类的账号拥有权限访问;
安装配置(IIS7)
以下以IIS7.5为例:
1、打开IIS,找到ISAPI筛选器,添加iirf.dll,
2、然后打开处理程序映射,添加脚本映射
3、最后,设置iirf.ini和iirf.dll权限,如果iirf.dll所在分区为FAT32格式,这一步可以省略:
注意:需要添加IIS_IUSRS和NETWORK SERVICE两个用户的读写权限。
4、查看设置状态:
--在IIRF.ini文件中输入以下内容--
#开启设置状态
StatusUrl iirfStatus
StatusInquiry ON
#设置日志
RewriteLog D:/inetpub/IonicIsapiRewriter/iirfLog.out
RewriteLogLevel 5
#开启RewriteEngine
RewriteFilterPriority HIGH
NotifyLog ON
RewriteEngine ON
然后在浏览器窗口中输入网址+iirfstatus即可查看设置状态:http://localhost:81/iirfstatus (本人是在本地测试的)
关于iirf.ini规则的编写
规则文件格式基本照搬ISAPI Rewrite,要作修改,如:
RewriteRule [源URL正则条件] [目的URL]
ISAPI Rewrite与IIRF的区别就在[目的URL],ISAPI Rewrite的要转义,而IIRF不用转义。
如果有现成的ISAPI Rewrite的规则可以直接复制过来,将[目的URL]中的反斜杠(/)一个个删除就可以用在IIRF中用了。
值得一提的是,IIRF的ini配置文件是动态加载的,我们在配置文件的时候不需要重新启动IIS就可以看到配置文件的结果;
好了,由于篇幅所限,就到此吧,如果有什么疑问可以一起交流。
全局配置(iirfglobal.ini)
如果我们想要作用在所有加载了这个dll的网站的配置,我们可以在dll文件夹创建一个iirfglobal.ini文件,这个文件可以使所有加载了同文件夹内的DLL的所有网站使用这个相同的配置,单个配置就需要在每个网站的根目录创建一个文件名iirf.ini的文件,并在其中编写规则即可;
IIRF的Log日志设置
RewriteLog c:/temp/iirfLog.outRewriteLogLevel 0
在我们调试规则的时候,我们可能需要看一下调试的内容Log一边纠正规则:
路径设置,确保文件夹的存在,否则会生成错误系统Log,但不影响IIRF的运行日志的等级,默认值为0
0 – 不会记录日志 1 – 少许的日志 2 – 比较多的日志 3 – 比较详细的日志 4 – 详细的日志,并会跟踪server variable和替换的字符串。
5 – 详细的日志,包括日志文件更改的事件,建议方便调试的时候使用。
规则格式
RewriteRule url-pattern replacement-string [modifiers]
url-pattern: 匹配的正则表达式(必需)
replacement-string: 要替换的字符串(必需)
modifiers: 有关对RewriteRule的操作标记,可选选项 modifiers的功能。
下面列举了它的所有值,允许组合(如[R,L]):
R = Redirect(URL跳转到<replacement-string>地址)
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服务器变量中)
IIS多站点伪静态实现工具Ionic’s Isapi Rewrite Filter(IIRF)——ISAPI Rewrite FULL的替代方案
IIS中增加URL Rewrite功能,最多人选用的是名为“ISAPI Rewrite”的软件,网上下载的破解版,其实破解不完善,最终会不能用。
再次查找,找到了Ionic’s Isapi Rewrite Filter,完全开源,完全免费,也完全没有中文使用手册。
不过,IIRF可以完美的支持IIS下多站点的伪静态,可以定义一个所有站点共用的全局规则、以及对每个站点分别定义规则。其规则与apache下的规则基本上完全一致,当然与ISAPI Rewrite也高度兼容,完全可以替代“ISAPI Rewrite”。
首先到官方网站http://www.codeplex.com/IIRF/Release/ProjectReleases.aspx下载最新软 件包,注意要下载的是IonicIsapiRewriter-2.1-Release-bin.zip,版本号可能会变化。以下安装仅针对Windows2003+IIS6.0的服务器环境。
一、安装IIRF
1、复制IIRF的DLL(IIRF.dll)到相应的文件夹,如D:/Rewrite,或者,它可以在一个完全不同的目录树。
2、如果您创建一个服务器全局范围的设置文件(iirfglobal.ini),你必须把它与(iirf.dll)文件在同一目录中。 该URL Rewrite筛选器将寻找其在该文件中的全局设置文件。 如果是多个站点,则在站点更目录下创建(iirf.dll)文件。
3、对(iirf.dll)所在目录赋予IIS_WPG用户组“读取”、“读取与运行”、“写入”权限。
4、 打开Internet信息服务管理器。右键点击IIS管理器左栏“网站”->“属性”,弹出“网站属性”选项卡,选择“ISAPI筛选器”,如下图添加IIRF。
5、重启IIS
6、右键点击IIS管理器左栏“网站” ->“属性”,弹出“网站属性”选项卡,选择“ISAPI筛选器”,查看“IIRF”加载是否成功。若是绿色向上箭头,则表示加载成功。
二、规则文件格式基本照搬ISAPI Rewrite,要作修改
RewriteRule [源URL正则条件] [目的URL]
ISAPI Rewrite与IIRF的区别就在[目的URL],ISAPI Rewrite的要转义,而IIRF不用转义。
如果网上有现成的ISAPI Rewrite的规则可以直接复制过来,将[目的URL]中的反斜杠()一个个删除就可以用在IIRF中用了。
知道这个之后,你就可以随便在网上与人交流,按ISAPI Rewrite交流,最后把转义符()删掉就行了。
三、日志设置
在IIRF中日志值可以设置为0-5,在规则文件的开头部分有两行设置日志类型
RewriteLog C:RewritesupesiteiirfLog.out (注意要写清楚路径,各站点不同)
RewriteLogLevel 0 (0为不记类,3为一般测试,5为处理故障)
日志的代价高昂,同时不会自动删除文件,日志类型一定要设成0,除非用于检查才能修改为其他值,检查完后一定要改为0,否则日志文件把硬盘占满就麻烦了。
如果日志不为0,筛选器起用后,对应文件夹会产生类似以下的文件,是文本格式的,可以用记事本查看。
iirfLog.out.12345.log
四、查看配置
在IIRF.ini文件中输入以下配置参数,则可通过浏览器方便查看目前IIRF配置
StatusUrl iirfStatus
StatusInquiry ON
在浏览器中输入http://localhost/iirfstatus,即可查看。
五、规则文件可随时修改,随时生效!(这一点跟apache一样)
六、附上WordPress的IIRF规则
先到WordPress后台设置固定连接为:/post/%post_id%.html
然后在WordPress所在网站的根目录创建(iirf.ini)文件,并在文件中加入以下规则:
RewriteLogLevel 0 RewriteLog E:/flyingbluelogfilesIIRFLOGlog StatusUrl iirfStatus StatusInquiry ON RewriteRule /index.html$ /index.php [L] # # from accessing through HTTP # # WordPress rewrite rules # # Below is for permalink like /post/%post_id%.html # # Provided By Sideblue RewriteCond %{REQUEST_FILENAME} ^wp-content.* RewriteCond %{REQUEST_FILENAME} ^wp-admin.* RewriteCond %{REQUEST_FILENAME} ^wp-include.* RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule /post/tag/(.*) /index.php?tag=$1 RewriteRule /tag/(.*) /index.php?tag=$1 RewriteRule /(contact|about-copyright|favor|archives|tags|sitemap) /index.php?pagename=$1 RewriteRule /post/category/(.*)/(feed|rdf|rss|rss2|atom)/?$ /wp-feed.php?category_name=$1&feed=$2 RewriteRule /post/category/?(.*) /index.php?category_name=$1 RewriteRule /author/(.*)/(feed|rdf|rss|rss2|atom)/?$ /wp-feed.php?author_name=$1&feed=$2 RewriteRule /author/?(.*) /index.php?author_name=$1 RewriteRule /rss.xml /wp-feed.php?feed=rss2 RewriteRule /feed/?$ /wp-feed.php?feed=rss2 RewriteRule /comments/feed/?$ /wp-feed.php?feed=comments-rss2 # RewriteRule /([0-9]+)/?([0-9]+)?/?$ /index.php?p=$1&page=$2 # RewriteRule /post/([0-9]+)/?([0-9]+)?/?$ /index.php?p=$1&page=$2 RewriteRule /post/([0-9]+).html /index.php?p=$1 RewriteRule /page/(.*)/?s=(.*) /index.php?s=$2&paged=$1 RewriteRule /page/(.*) /index.php?paged=$1 RewriteRule /post/date/([0-9]{4})([0-9]{1,2})([0-9]{1,2})/([^/]+)/?([0-9]+)?/?$ /index.php?year=$1&monthnum=$2&day=$3&name=$4&page=$5 RewriteRule /post/date/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/?$ /index.php?year=$1&monthnum=$2&day=$3&page=$4 RewriteRule /post/date/([0-9]{4})/([0-9]{1,2})/?$ /index.php?year=$1&monthnum=$2&page=$3 RewriteRule /post/([0-9]+).html/(feed|rdf|rss|rss2|atom) /index.php?feed=rss2&p=$1 RewriteRule /post/([0-9]+).html/trackback /wp-trackback.php?p=$1 |