现在我用的是IIRF 2.0(Ionics Isapi Rewrite Filter),2.1只出到测试版。
搞了一晚上,一加载网站就不工作了。先搜集点资料,过几天单独弄个机器测试,感觉跟plesk有关系,影响筛选的加载,用isapi_rewrite也一样,单独添加dll文件的方式行不通,只能用安装文件。
一、IIRF的简介:这个就不用详表了,基于Win IIS的开源免费Isapi,功能可以用到动态页面静态化、多泛域名解析、防盗链等等很多领域。具体详细简介可以GG(BS Baidu),雷同也不要紧。官方网站是:http://www.codeplex.com/IIRF
二、IIRF的安装:
安装还算比较简单,相比我上一个用的1.2版本,多个网站不再需要复制多个dll给不同的网站用了,整个IIS可以可以用一个dll还可以多个网站用一个。
1、我们将下载下来的文件解压,只要找到bin目录下的IIRF.dll文件即可,其他文件都是没有太大用处的,找到这个文件后将其复制到一个合适的目录,我的目的就是多个网站都用这一个dll,所以我将它放置在一个自己整理的服务应用文件夹内;确保该文件夹IIS_WPG或者IUSR_XXX之类的账号拥有权限访问;
2、在IIS管理界面的每个网站右键->属性(如果想作用在整个IIS,那么就在网站列表上级“网站”节点上右键->属性),选择ISAPI筛选器->添加->输入一个筛选器名字->选择可执行文件(指定到刚刚安置好的dll文件)->确定,重启IIS就OK了;
3、检查是否已经加载了dll,只要同样打开ISAPI筛选器管理界面,看到绿色的箭头即可,至于是Low还是High不重要。如果怎么弄都是未知,那么建议删掉这个网站重建建立再试;值得一提的是,配置文件是动态加载的,我们在下面配置的配置文件的时候不需要重新启动IIS就可以看到配置文件的结果;
4、配置配置文件,之前如果我们想要作用在所有加载了这个dll的网站的配置,我们可以在dll文件夹创建一个IirfGlobal.ini文件,这个文件可以使所有加载了同文件夹内的dll的所有网站使用这个相同的配置,单个配置就需要在每个网站的根目录创建一个文件名IIRF.ini的文件,并在其中编写规则即可;OK,这样,你的IIRF就安装完成了。三、IIRF的Log文件:
在我们调试规则的时候,我们需要看一下调试的内容Log一边纠正规则:RewriteLog c:\temp\iirfLog.out RewriteLogLevel 0路径设置,确保文件夹的存在,否则会生成错误系统Log,但不影响IIRF的运行
日志的等级,默认值为0
0 – 不会记录日志
1 – 少许的日志
2 – 比较多的日志
3 – 比较详细的日志
4 – 详细的日志,并会跟踪server variable和替换的字符串。
5 – 详细的日志,包括日志文件更改的事件,建议方便调试的时候使用四、规则
规则格式:RewriteRule []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服务器变量中)
IIRF的配置目录结构如下(仅供参考):
#IIRF 本机配置目录
C:\WINDOWS\system32\inetsrv\IIRF\IIRF.dll
C:\WINDOWS\system32\inetsrv\IIRF\IIRF.ini
C:\WINDOWS\system32\inetsrv\IIRF\IirfGlobal.ini
#IIRF 在项目中的配置文件
E:\Work\Code\myforum\IIRF.ini
IIRF.ini (一定要和IIRF.dll文件在同一目录下)
RewriteFilterPriority HIGH
NotifyLog ON
RewriteEngine ON
IirfGlobal.ini (这个文件不是必须的但是最好写上)
RewriteEngine ON
E:\Work\Code\myforum\IIRF.ini (貌似类似 Apache 的 .htaccess)
# -CodeIgniter- TO REMOVE index.php FROM URL
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
我也是 每个规则都要测试好多遍
编写规则这点很头疼,还是没怎么弄明白