很多朋友使用HttpHandle+Server.Transfer的方法实现asp.net中的urlrewrite,但此方法是错误的。
首先,HttpHandle是实现不了urlrewrite的;其次,Server.Transfer是标准的重定向,根本不是urlrewrite。
其实,实现urlrewrite不用自己HttpHandle,也不用自己实现HttpModule,用几行代码即可轻松实现。
本文介绍的是在虚拟主机上实现asp.net的urlrewrite。
虚拟主机不同于独立的服务器,因为没有权限去修改IIS,也没有权限去安装iis rewrite之类的IIS插件。
具体做法如下:打开global.asax.cs,定位到protected void Application_BeginRequest(Object sender, EventArgs e)。
代码:
protected void Application_BeginRequest(Object sender, EventArgs e)
{
string oldUrl = HttpContext.Current.Request.RawUrl ;
string pattern = @"^(.+)default/(d+).aspx(?.*)*$";
string replace = "$1default.aspx?id=$2";
if(Regex.IsMatch(oldUrl, pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled))
{
string newUrl = Regex.Replace(oldUrl, pattern, replace, RegexOptions.Compiled |
RegexOptions.IgnoreCase);
this.Context.RewritePath(newUrl);
}
}
访问类似:.../default/123.aspx 的网址,便会重定向到:.../default.aspx?id=123。
此外,利用功能强大的正则表达式,可以任意按照自己的需要来重写url,
由于是在虚拟主机上,因此只能重定向.aspx文件,如果是独立服务器,只要把后缀名在IIS中注册一下,便可以实现任意后缀名的处理。
比如可以注册一个*.myweb这样的类型,当别人访问default/123.myweb时,你可以把它重定向到default.aspx?id=123。
以上介绍了在虚拟主机上Asp.net如何实现Urlrewrite的一种办法,希望对大家有所帮助。