快速业务通道

Step1数据系统技术(1.基于404错误的URL重写技术)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21

现在第一篇,讨论我的网站之中使用的URL重写技术,实际上,该技术并不是我编写的,可能有用户能够记得,我的网站www.step1.cn原来就是一个博客,那个时候采用的系统是博客园提供的cnblogs程序(我将这个程序改装成能够在当时的虚拟主机上运行,可花了不少功夫),后来我将博客迁到这里之后,对Step1.cn进行大的改版,当时我实在舍不得这套博客程序之中使用的URL重写的技术,因此专门的从那个cnblogs程序之中将相关的代码从其中拆分出来成一个DLL类,在我的网站使用URL重写技术。

当时由于cnblogs.cn这个程序结构相当优秀,所以我更改的并不多,主要有以下几点:

1.基于404错误的URL重写技术。因为有的虚拟主机并不支持URL重写技术,尤其是你要对静态的HTML文件进行URL重写(当然我并没有使用这个技术),可是基本上没有虚拟主机支持对静态的HTML文件进行URL重写(至少我没有用过),于是我想到了一个变通的方法,那就是修改服务器的404错误页面的设置,将该设置指向到一个特定的ASPX文件,再在ASPX文件之中调用cnblogs的URL重写程序。

Error404.aspx的对应类代码:

1  public class Error404 : System.Web.UI.Page
2  {
3    private void Page_Load(object sender, System.EventArgs e)
4    {
5      if(Request.QueryString!=null)
6      {
7        string[] queryString=Request.RawUrl.Substring(Request.RawUrl.IndexOf("?")+1).Split(new char[]{'';''});
8        if(queryString.Length==2 && queryString[0]=="404")
9        {
10          Uri uri=new Uri(queryString[1]);
11          string query=uri.Query;
12          if(query.StartsWith("?"))
13            query=query.Substring(1);
14          this.Context.RewritePath(uri.AbsolutePath,uri.UserInfo,query);
15          (new UrlReWriteHandlerFactory()).GetHandler(this.Context,Request.RequestType,uri.PathAndQuery,Server.MapPath(uri.LocalPath)).ProcessRequest(this.Context);
16          this.Context.Response.End();
17        }
18      }
19    }
20  }

我刚才看了一下,剩下的代码由于大部分摘自cnblogs的源码,而我更改的部分都很小,因此我不在本文之中提供源码,如果确有需要,可以首先去参考cnblogs的源码,也可以发邮件向我索取该部分的源码,我可以直接提供。

总体上来讲,该URL重写机制,通过在Web.Config文件之中添加类似于如下的配置来实现对应的URL重写的功能:

1<HttpHandlerpattern="^/place/cn/([%0-9a-zA-Z/]*).aspxcontentquot;type="Step1.UrlRewriter.PageHandlerFactory,Step1.UrlRewriter"handlerType="Redirect"pageLocation="/place/Place.aspx?p=$1"/>
2

以上的配置,会将网址/place/cn/aaaaaaa.aspx自动在服务端转向到/place/Place.aspx?p=aaaaaaa

详细的内容,可能我在后面讲解其他的技术的时候会重新提到。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号