1、 为什么要URL重写?
提高搜索引擎阅读和索引到网站的能力(SEO)
隐藏实际网站路径,提高网站安全性
易于用户输入和记忆
2、 能达到什么样的效果?
在网站的各个网页中,经常需要传值,如要进行分页时,在利用POST提交时,就要传入:CurrentRequestPageIndex,CurrentRequetSize,CurrentRequestOrder,CurrentRequestGroupId进行当前请求第几页,一页多少条数据,排序规则,分组依据等数据,那么在URL中就可能会是这样的:http://localhost:52088/list.aspx?index=2&size=10&order=desc&groupId=21,进行URL进行重写后,可将其变为:http://localhost:52088/list-2-10-desc-21.html
3、 实现原理
首先捕获一个进入的URL,进行正则判断,当成功匹配一个正则时,就用匹配到的正则下面规定的样子进行重写。
这里需要注意的是:
1)网站中有list.aspx这个页面。我们在请求list.aspx这个页面时,如果要给它传参数,即:list.aspx?id=4这个样子时。在请求页Index.aspx中的链接应该写为:<a href="list-4.html" >Go</a>
2)在请求管道的context.BeginRequest中注册事件,进行正则匹配,在正则中,是写看用户请求页的规则,即list-4.html,当满足这个规则时,再对其进行重写为指定的样式。
4、URL重定的实现过程
第一步:
新建:UrlRewrite.cs类,实现IHttpModule
public class UrlRewrite : IHttpModule
{
public void Dispose()
{
throw new NotImplementedException();
}
public void Init(HttpApplication context)
{
//当ASP.NET运行时接收到新的HTTP请求的时候触发这个事件
context.BeginRequest += new EventHandler(context_BeginRequest);
}
void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication app = sender as HttpApplication;
if (app != null)
{
//url重写
//list-(数字).html-->list.aspx?id=数字
string ralurl = app.Request.RawUrl;
//对-进行转义,因为\也是特殊字符,因此用两个\
//当发送过来的 URL 看起来像这个样子的时候如:list-4.html
Regex regex = new Regex("list\\-(\\d{1,3})\\.htm[l]?");
Match match = regex.Match(ralurl);
if (match.Success)
{
string id = match.Groups[1].Value;
//就把请求过来的 URL 重写成这个样子
app.Context.RewritePath("~/list.aspx?id=" + id);
}
}
}
}
第二步:
在Web.Config中配置
<system.web>
<httpModules>
<!-- 命名空间.类名-->
<addname="urlrewrite"type="WebApplication1.UrlRewrite"/>
</httpModules>
<compilationdebug="true"targetFramework="4.0" />
</system.web>