background image

  不过事实上,如果要实现上述功能,我们也可以分两步进行。首先我们在

IIS 级别使用

IIRF 进行 URL Rewrite,接着在 ASP.NET 级别作进一步的 URL Rewrite。例如我

们现在要实现将

http://jeffz.domain.com/articles”

重写为

/ArticleList.aspx?

owner=jeffz” , 就 可 以 先 在 让 IIRF 做 第 一 次 URL   Rewrite , 目 的 是 将

“/articles”

重写至

/ArticleList.aspx”。

RewriteRule    ^/Articles$    /ArticleList.aspx      [I, L, U]

  这样,

ASP.NET 引擎就会直接接收到一个针对/ArticleList.aspx 的请求了。然后在

ASP.NET 内部,我们可以作第二次的 URL Rewrite(方便起见,我这里还是在

Global.asax 里写,在项目中还是建议使用额外的 HttpModule 来实现)。

protected void Application_BeginRequest(object sender, EventArgs e)

{

    HttpContext context = HttpContext.Current;

    string host = context.Request.Url.Host;

    string owner = host.Substring(0, host.IndexOf('.'));

    context.RewritePath(context.Request.RawUrl + "?owner=" + owner);

}

  经过两次

URL Rewrite,已经实现了我们想要的效果(在实际项目中,上面的代码不

能直接使用,因为需要判断是否有

Query String 等等)。

  此外,

ASP.NET 级别的 URL Rewrite 只能在 ASP.NET 里工作(显然的事情),如果

要让

URL Rewrite 支持 PHP,RoR 等其他服务器技术,就只能使用 IIS 级别的

URL Rewrite 了(或者其他服务器技术提供的 URL Rewrite 功能)。