这几天研究Url Rewrite:)

在开发这个自己用的Blog时,决定认真研究一下以前接触过的URL Rewrite,我见过类似这样的域名: xxx.com/Archive/2008/03/21/,一直不知道怎么实现的,正好借这次机会研究一下。

从前天开始就一直在努力,基本上是第一天差了大半天资料,这篇文章写得非常详细,向作者致敬!第二天终于上手做出Demo,但有Bug,第三天解决了Bug,完美运行^_^

其实简单点说,个人觉得对于ASP.NET开发者实现URL Rewrite基本有3种途径:

1. 修改IIS ISAPI扩展,例如把”.xx”交给aspnet_isapi.dll ISAPI 扩展,就成了这样:”xxx.htm?q=blah”,这样就是最简单直接的SEO,但由于我是虚拟主机所以我仅仅只在本地试了下,不知道精英科技的管理面板是否支持,我没有试。
2. 修改WebConfig,添加自己实现的IHttpModule,根据传入的URL来Rewrite到相应的页面,比如接受到类似” Archive/2008/03/21/”的URL,则Rewrite到Archive.aspx?Year=2008&Month=3&Day=21,这中间是用正则来匹配的。
3. 使用第三方组件如:IIS Rewrite

由于鄙人一直都希望自己实现某些东西,只要不是太复杂,所以我决定使用第二种。那么一个比Hello World还简单的实例是这样做的:



写一个class实现IHttpModule:
WayneHttpModule  IHttpModule
然后:
public void Init(HttpApplication context)
        
            context.BeginRequest = new EventHandler(context_BeginRequest);
        
        void context_BeginRequest(object sender, EventArgs e)
        
            HttpApplication app  sender as HttpApplication;
            app.Context.RewritePath("Test.aspx");
        
然后在Web.config里添加:
<httpModules>
        lt;add name="WayneHttpModule" type="WayneBlog.Web.WayneHttpModule"/>
      lt;/httpModules>

就搞定了。。。
这样在当前虚拟目录下,任何以“aspx”为后缀的Url请求全部会被WayneHttpModule截获并且转向(Rwrite)到Test.aspx,需要注意的是,即使这个页面并不存在,比如IamFoo.aspx,呵呵。

那么类似这样的:” Archive/2008/03/21/”,教程作者提到必须设一个主页(比如Default.aspx),并且这个主页物理存在于” /2008/03/21/”这个目录下,如果嫌麻烦那么可以仿照.Text,截获所有的Http请求并交给aspnet_isapi.dll ISAPI 扩展。我个人觉得这样对于我来说更麻烦,我选择了去建Default.aspx,每次发表一篇新的Blog,就去生成目录并写Default.Aspx文件:)

Tags:

Categories:

Updated:

Leave a comment