通过RewritePath方法重写Url地址实现伪静态
网站实现伪静态的好处就不说了,当然这个也可以在服务器作配置来实现,但如果租用服务器,还得和服务商商量,比较麻烦。
这是主要是讲在我们自己的程序中实现。
我是用这个方法将自己的url地址改成目录式的了。方法如下:
1,首先新建一个类库项目,将自动生成的Class1文件删掉,自己创建一个HttpModule.cs类。
2,修改代码,使HttpModule.cs类继承自IHttpModule接口,继承该接口必须实现
void Dispose();
void Init(HttpApplication context);
两个方法,Dispose方法我们可不用管它,我们仅需要在Init方法中实现HttpApplication的BeginRequest事件即可,代码如下:
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}
context_BeginRequest事件如下:
void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
string path = context.Request.Path;
//以上这句代码是实现客户端请求的虚拟路径,如本站中的某链接的地址为http://www.lmwlove.com/ab/CatalogID1,那么当浏览器者点击该链接的时候,context.Request.Path的值就是http://www.lmwlove.com/ab/CatalogID1了。
获取到该值后,就可以根据自己定义的规则来进行Url重写了。比如本站中的ab代表tec/tec_article.aspx文件,那么就可以根据path中是否包含ab来进行重写了。
如下代码:
if (path.Contains("ab"))
{
context.RewritePath("tec/tec_article.aspx")
}
}
重写后会引发另一个问题,就是当页面回发时,页面会定向到原始地址,解决方法请参见本站:RewritePath重写Url后回发会定向到原始地址的解决方案
全都代码如下:
using System;
using System.Collections.Generic;
using System.Web;
using System.Text;
using System.Text.RegularExpressions;
using System.Collections;
namespace MyHttpModule
{
public class UrlReWriter : IHttpModule
{
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}
void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
string path = context.Request.Path;
if (path.Contains("ab"))
{
context.RewritePath("tec/tec_article.aspx")
}
}
public void Dispose()
{
}
}
}
就是这样简单,第二步就算完成了。
3,编译HttpModule.cs,将dll文件复制到网站的bin文件夹下。
4,配制web.config文件
在web.config文件的system.web节下配制
<httpModules >
<add name="UrlReWriter" type="MyHttpModule.UrlReWriter,MyHttpModule" / >
</httpModules >
其中type中的MyHttpModule.UrlReWriter为UrlReWriter.cs的命名空间,MyHttpModule为编译后dll文件名。
注:我在本机调试时是用以上配制,通过OK,但上传到租用空间后报错。将配制文件改为
<system.webServer >
<modules >
<add name="UrlReWriter" type="MyHttpModule.UrlReWriter,MyHttpModule" / >
</modules >
</system.webServer >
就OK了。
本文来源于:http://www.lmwlove.com/ac/ID478
------解决方案-------------------- 你是问问题还是发博客文章?
------解决方案-------------------- 探讨 发文章,原则的,拿积分加引流量。