实现 URL 重写 可以使用 ISAPI 筛选器在 IIS Web 服务器级别实现 URL 重写,也可以使用 HTTP 模块或 HTTP 处理程序在 ASP.NET 级别实现 URL 重写。本文重点介绍如何使用 ASP.NET 实现 URL 重写,因此我们将不对使用 ISAPI 筛选器实现 URL 重写的细节进行深入探讨。但是,有大量的第三方 ISAPI 筛选器可用于 URL 重写,例如:
- ISAPI Rewrite
- IIS Rewrite
- PageXChanger
- 还有许多其他的筛选器!
通过 System.Web.HttpContext 类的 RewritePath() 方法,可以在 ASP.NET 级别实现 URL 重写。HttpContext 类包含有关特定 HTTP 请求的 HTTP 特定信息。对于 ASP.NET 引擎收到的每个请求,均为该请求创建一个 HttpContext 实例。此类具有如下属性:Request 和 Response,提供对传入请求和传出响应的访问;Application 和 Session,提供对应用程序和会话变量的访问;User,提供有关通过了身份验证的用户的信息;其他相关属性。
使用 Microsoft® .NET Framework Version 1.0,RewritePath() 方法可以接受单个字符串作为要使用的新路径。HttpContext 类的 RewritePath(string) 方法在内部对 Request 对象的 Path 属性和 QueryString 属性进行更新。除了 RewritePath(string),.NET Framework 1.1 还包括另一种形式的 RewritePath() 方法,此方法可以接受三个字符串输入参数。此备用重载形式不仅要设置 Request 对象的 Path 属性和 QueryString 属性,还要设置内部成员变量,这些变量用于计算 Request 对象的 PhysicalPath、PathInfo 和 FilePath 属性值。
要在 ASP.NET 中实现 URL 重写,需要创建 HTTP 模块或 HTTP 处理程序,以便完成以下操作:
1. 检查被请求的路径,以确定 URL 是否需要重写。
2. 如果需要重写,通过调用 RewritePath() 方法来重写路径。
例如,假设我们的网站中包含每个员工通过 /info/employee.aspx?empID=employeeID 均可访问的信息。为了使 URL 可以更多地被“删节”,我们可以决定通过以下地址来访问员工页面:/people/EmployeeName.aspx。这就是我们要使用 URL 重写的一个例子。也就是说,在请求 /people/ScottMitchell.aspx 页面时,我们要重写该 URL,以便使用 /info/employee.aspx?empID=1001 页面。


