Intelligencia.UrlRewriter简单介绍(urlRewrite组件使用简单介绍)
1、在webconfig中加入如下代码
<configSections>
<section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter" />
</configSections>
<rewriter>
<!--重写规则-->
<rewrite url="^/User/(/d+)$" to="~/aa.aspx?id=$1" processing="stop" />
<rewrite url="^/User/(/w+)$" to="~/aa.aspx?name=$1" processing="stop" />
</rewriter>
<system.web>
<httpModules>
<add type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter" name="UrlRewriter" />
</httpModules>
</system.web>
2、解决在URL Rewrite后保持PostBack地址
在Web项目中创建一个browser文件,例如 App_Browsers/Form.browser(名字可以随便起,只要在这个文件夹下就可以),然后在里面里写入下列代码保存即可。
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter controlType="System.Web.UI.HtmlControls.HtmlForm"
adapterType="Intelligencia.UrlRewriter.FormRewriterControlAdapter" />
</controlAdapters>
</browser>
</browsers>
更多详情请参考http://www.cnblogs.com/JeffreyZhao/archive/2008/01/13/Url-Rewrite-3.html
urlrewriter.net官网下载地址:http://urlrewriter.net/index.php/download/
中文版http://www.urlrewriter.cn/Docs
常用规则
当使用通配符映射或者使用ASP.NET处理所有HTTP请求的时候,IIS的默认文档机制也就失去了该有的作用,以下代码就是用来重新实现默认文档的方法:
<rewrite url="^(.*)/(/?.+)?$" to="$1/default.aspx$2" />
注意:使用“processing="restart"”的时候将会导致重写引擎从头开始执行所有的重写规则,此时应当注重包含“/default.aspx”字符串的处理。
如果你需要同时支持多个默认文档,那么以上代码需要修改为:
<if url="^(.*)/(/?.+)?$">
<rewrite exists="$1/default.aspx" to="$1/default.aspx$2" />
<rewrite exists="$1/index.aspx" to="$1/index.aspx$2" />
<rewrite exists="$1/index.html" to="$1/index.html$2" />
</if>
编辑以上规则代码的时候,尤其要注意确认文件是否存在。
此外,在使用通配符映射或者使用ASP.NET处理所有HTTP请求的时候,你会发现.gif、.css等文件无法正常访问,这是因为此时对这些文件类型的处理都被ASP.NET所拦截。修正方法如下:
<rewrite
url="^(/.+(/.gif|/.png|/.jpg|/.ico|/.css|/.js)(/?.+)?)$"
to="$1" processing="stop" />
两个比较特殊的正则表达式字符是“^”和“$”(不是必须的),“^”代表URL的开头,“$”代表URL的结尾。使用这两个符号可以使您更加精确的控制重写动作,以确保程序所匹配的URL正是您想处理的。
“~/”表示当前网站应用程序运行所在的虚拟根目录,当您把网站应用程序安装于虚拟目录(或者非根目录)的时候,这尤其有用,而无须重新编写任何代码来替换您的虚拟根路径。
模式匹配在处理查询字串(QueryStrings)的时候尤其有用,这可以让您的URL去掉类似于“?id=3”的代码段,这非常有用,可以让你轻松的实现伪静态。
下面列出两个我们认为非常有特色的重写规则:
(1) 当目标URL不包含自定义查询字串的时候:
<rewrite url="^~/mypage(/?.+)?$" to="~/default.aspx$1" />
此时“$1”匹配的是(/?.+)?,也就是所有的查询字串。
(2) 当目标URL包含自定义查询字串的时候:
<rewrite url="^~/mypage(/?(.+))?$"
to="~/default.aspx?page=mypage&$2" />
注意此时需要使用“&”来代替“&”,这是XML文档语法的需要。
关于xml中特殊的转义字符还有:
下面是五个在XML文档中预定义好的实体:
< |
< |
小于号 |
> |
> |
大于号 |
& |
& |
和 |
' |
' |
单引号 |
" |
" |
双引号 |
实体必须以符号"&"开头,以符号";"结尾。
注意: 只有"<" 字符和"&"字符对于XML来说是严格禁止使用的。剩下的都是合法的,为了减少出错,使用实体是一个好习惯。
也就是说用到以上字符时,也需要转义。
今天刚好遇到“&”需要转义的问题,多写一点,
开始规则这样写,总是出错:
<rewrite url="~/article-(.*)-(.*)-(.*).html" to="~/testurl/article.asp?id=$1&sid=$2&page=$3" processing="stop"/>
错误信息:
“/”应用程序中的服务器错误。
配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。
分析器错误信息: 分析 EntityName 时出错。 行 23,位置 81。
行 23:<rewrite url="~/article-(.*)-(.*)-(.*).html" to="~/testurl/article.asp?id=$1&sid=$2&page=$3" processing="stop"/>
后来“&”转义后,就正常了,规则如下:
<rewrite url="~/article-(.*)-(.*)-(.*).html" to="~/testurl/article.asp?id=$1&sid=$2&page=$3" processing="stop"/>
当然其他需要转义的字符同样处理。