在虚拟主机上Asp.net如何实现Urlrewrite

发布时间:2020-09-20编辑:脚本学堂
在虚拟主机上Asp.net如何实现Urlrewrite

很多朋友使用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的一种办法,希望对大家有所帮助。