url重写IIRF(Ionic's Isapi Rewrite Filter)手册第2/2页
更新时间:2008年07月29日 10:18:00 作者:
IIRF与ISAPI_Rewrite的规划区别只在于IIRF不需要使用转义字符\,而ISAPI_Rewrite则需要使用转义字符\.
RewriteCond
RewriteCond <test-string> <pattern> [<modifier flag[,...]>]
类似于条件判断,并且允许多个条件,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 <filename stub> 日志路径
RewriteLogLevel {0,1,2,3,4,5} 日志的等级
一个常见问题
在刚安装IIRF之后就测试一下ASP.NET下面的URL,发现还是跟以前ASP.NET重写URL有一样的问题:无法改写Form下面的action的路径,而我们这时使用Request.RawUrl获取原始的URL是为空的。也许你开始注意到了我上面写过的RewriteRule的modifiers选项[U]。我们可以通过将原始的URL保存到服务器变量中。然后通过Request.ServerVariables[name]来获取。然后重写action的值就可以了。
Quote:
1 Public Class FormFixerHtmlTextWriterClass FormFixerHtmlTextWriter
2 Inherits System.Web.UI.HtmlTextWriter
3 Private _url As String
4 Public Sub New()Sub New(ByVal writer As TextWriter)
5 MyBase.New(writer)
6 _url = ForumContext.Current.Context.Request.ServerVariables("HTTP_X_REWRITE_URL")
7 End Sub
8 Public Overloads Overrides Sub WriteAttribute()Sub WriteAttribute(ByVal name As String, ByVal value As String, ByVal encode As Boolean)
9 If (Not _url Is Nothing And String.Compare(name, "action", True) = 0) Then
10 value = _url
11 End If
12 MyBase.WriteAttribute(name, value, encode)
13 End Sub
14 End Class
后记:
IIRF已经分析的差不多了。从上面可以看出,功能确实很强大,而且配置也很灵活。发现自己也慢慢喜欢上它了。嘿嘿。重要的是。它是免费,开源的。
您可能感兴趣的文章:
相关文章
Windows 安装IIS出现的问题(无法安装IIS,提示“安装程序无法复制文件IISApp.vbs”)
在重装IIS6.0的时候会遇到“安装程序无法复制文件IISApp.vbs”等一系列错误......2009-03-03
IIS日志报Connections_Refused问题的解决方法
这篇文章主要介绍了IIS日志报Connections_Refused问题的解决方法,本文给出了2个解决方法,需要的朋友可以参考下2014-10-10
用Windows Storage Server 2008做iSCSI存储服务器的图文方法
本节将介绍WSS2008做iSCSI服务器及其在网络中的应用,需要的朋友可以参考下2017-02-02


最新评论