在ASP.NET中执行URL重写经典方案

摘要:介绍如何使用 Microsoft ASP.NET 执行动态 URL 重写。URL 重写是截取传入 Web 请求并自动将请求重定向到其他 URL 的过程。讨论实现 URL 重写的各种技术,并介绍执行 URL 重写的一些实际情况。

引言

让我们花点时间来看一下网站上的一些 URL。您是否发现一些类似于 http://yoursite.com/info/dispEmployeeInfo.aspx?EmpID=459-099&type=summary 的 URL?或者,您可能将一系列网页从一个目录或网站移动到另一个目录或网站,结果导致已将旧 URL 用作书签的访问者断开链接。在本文中,我们将了解如何通过将 http://yoursite.com/info/dispEmployeeInfo.aspx?EmpID=459-099&type=summary 替换为类似于 http://yoursite.com/people/sales/chuck.smith 的网址,使用 URL 重写将那些冗长的 URL 缩写为富有意义且容易记忆的 URL。我们还将了解如何将 URL 重写用于创建智能 404 错误。

URL 重写是截取传入 Web 请求并自动将请求重定向到其他资源的过程。执行 URL 重写时,通常会检查被请求的 URL,并基于 URL 的值将请求重定向到其他 URL。例如,在进行网站重组而将 /people/ 目录下的所有网页移动到 /info/employees/ 目录中时,您可能希望使用 URL 重写来检查 Web 请求是否指向了 /people/ 目录中的文件。如果请求指向 /people/ 目录中的文件,您可能希望自动将请求重定向到 /info/employees/ 目录中的同一文件。

使用传统的 ASP,应用 URL 重写的唯一方法是编写 ISAPI 筛选器,或者购买提供 URL 重写功能的第三方产品。但是,使用 Microsoft ASP.NET,您可以通过很多方法来轻松地创建您自己的 URL 重写软件。本文讨论了可供 ASP.NET 开发人员实现 URL 重写的各种技术,然后讨论了 URL 重写的一些实际使用情况。在深入讨论 URL 重写的技术细节之前,让我们先看一些可以使用 URL 重写的日常情景。

URL 重写的常见用法

创建数据驱动的 ASP.NET 网站时,通常会产生一个单个的网页,该网页基于查询字符串参数显示数据库数据的子集。例如,在设计电子商务站点时,您的任务之一便是允许用户浏览待售产品。为此,您可以创建一个名为 displayCategory.aspx 的页面,该页面将显示给定类别的产品。可以通过查询字符串参数来指定要查看的该类别的产品。也就是说,如果用户要浏览待售的 Widget 产品,并且所有 Widget 产品的 CategoryID 均为 5,则用户可以访问以下网址:http://yousite.com/displayCategory.aspx?CategoryID=5。

创建具有此类 URL 的网站有两点不足:首先,从最终用户的角度考虑,URL http://yousite.com/displayCategory.aspx?CategoryID=5 比较杂乱。可用性专家 Jakob Neilsen建议遵循以下标准来选择 URL:


简短。


易于键入。


可以看出站点的结构。


“可删节”,允许用户通过删除 URL 的组成部分来浏览站点。

我还要增加一条标准,即,URL 应该便于记忆。URL http://yousite.com/displayCategory.aspx?CategoryID=5 不符合 Neilsen 的任何标准,也不容易记住。要求用户键入查询字符串值将使 URL 的键入变得非常困难,并且只有了解查询字符串参数的用途及其名称/值对结构的富有经验的 Web 开发人员才能够对 URL 进行“删节”。

较好的方法是允许使用切合实际且容易记忆的 URL,如 http://yoursite.com/products/Widgets。只要看一眼 URL,您便可以推断出将要显示的内容 -- 有关 Widget 的信息。此 URL 也很容易记住和共享。我可以告诉我的同事“请查看 yoursite.com/products/Widgets,”,她可能无需再次问我 URL 是什么即可打开该页面。(尝试一下,您只需说出“Amazon.com 页面”即可!)此 URL 还将显示出来,并且应该是“可删节”的。也就是说,如果用户删去 URL 的末端,键入 http://yoursite.com/products,他们应该看到所有产品的列表,或者至少应该看到他们可以查看的所有类别的产品列表。

注意:要获得“可删节”URL 的最好示例,可考虑使用由许多 blog 引擎生成的 URL。要查看 2004 年 1 月 28 日的帖子,用户可以访问诸如 http://someblog.com/2004/01/28 的 URL。如果该 URL 被删节为 http://someblog.com/2004/01,用户将看到 2004 年 1 月的所有帖子。将该 URL 进一步删节为 http://someblog.com/2004 将显示 2004 年的所有帖子。

除了简化 URL 之外,URL 重写还经常用于处理网站重组,以免导致大量链接断开或书签过期。

请求到达 IIS 时将会发生什么情况

在正式研究 URL 如何实现重写之前,应首先了解 Microsoft Internet Information Services (IIS) 如何处理传入请求,这一点非常重要。当请求到达 IIS Web 服务器时,IIS 检查被请求文件的扩展名以确定如何处理该请求。IIS 可以自行处理请求(如 HTML 页面、图像以及其他静态内容),或者将请求路由到 ISAPI 扩展。(ISAPI 扩展是一个处理传入 Web 请求的非托管编译类。其任务是生成被请求资源的内容。)

时间: 2024-09-10 16:11:37

在ASP.NET中执行URL重写经典方案的相关文章

在 ASP.NET 中执行 URL 重写

asp.net|执行 Scott Mitchell 4GuysFromRolla.com 适用范围: Microsoft ASP.NET 摘要:介绍如何使用 Microsoft ASP.NET 执行动态 URL 重写.URL 重写是截取传入 Web 请求并自动将请求重定向到其他 URL 的过程.讨论实现 URL 重写的各种技术,并介绍执行 URL 重写的一些实际情况. 下载本文的源代码. 本页内容 引言 URL 重写的常见用法 请求到达 IIS 时将会发生什么情况 实现 URL 重写 构建 UR

ASP.NET 中执行 URL 重写

asp.net|执行   URL 重写就是把URL地址重新改写      详情:http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx      优点:把url缩短等      用法:1.下载ms的URLRewrite.dll,放到你的bin下      2.在web.config里设置如下:      <?xml version="1.0" encoding="

ASP.NET中获取URL重写前的原始地址

在ASP.NET中,如果你使用了URL重写,通过HttpContext.Request获取到的是重写后的地址.如果这个地址要返回给客户端(比如Redirect),我们一般希望是重写前的友好地址. 通常的使用场景是当我们有某个页面需要用户登录才能访问时,我们会在代码中判断当前访问用户是否登录,如果未登录,则重定向至登录页面,并将当前网址通过Url参数传递给登录页面.如果使用了URL重写,并通过Request.Url.AbsoluteUri获取当前网址,用户登录后打开的就是重写后的地址,这虽然不影响

ASP.NET中获取URL重写前的原始地址详解

在ASP.NET中,如果你使用了URL重写,通过HttpContext.Request获取到的是重写后的地址.如果这个地址要返回给客户端(比如Redirect),我们一般希望是重写前的友好地址.   通常的使用场景是当我们有某个页面需要用户登录才能访问时,我们会在代码中判断当前访问用户是否登录,如果未登录,则重定向至登录页面,并将当 前网址通过Url参数传递给登录页面.如果使用了URL重写,并通过Request.Url.AbsoluteUri获取当前网址,用户登录后打开的就是 重写后的地址,这虽

ASP.NET中获取URL重写前的原始地址详解_实用技巧

通常的使用场景是当我们有某个页面需要用户登录才能访问时,我们会在代码中判断当前访问用户是否登录,如果未登录,则重定向至登录页面,并将当前网址通过Url参数传递给登录页面.如果使用了URL重写,并通过Request.Url.AbsoluteUri获取当前网址,用户登录后打开的就是重写后的地址,这虽然不影响正常使用,但从用户体验及URL统一的角度,我们更希望是重写前的地址. 之前,我们在开发中也被这个问题困扰,只能尽量通过js重定向至登录页面(通过location.href获取当前网址)或者在代码中

在ASP.NET中实现Url Rewriting

asp.net 概要 分析如何使用微软提供的ASP.NET来对动态产生的URL地址进行网址重写. 网址重写是实现一种截取网址请求并将其进行处理后重新指向到一个指定的网址的过程.作者本人在对各种实现网址重写的技术进行研究和探讨后得出的经验和方法,希望能对您有所帮助. 内容简介 稍微花点时间看一看你做的网站里头的URL地址,你看到类似这样的地址吗http://yoursite.com/info/dispEmployeeInfo.aspx?EmpID=459-099&type=summary ?也许你

一个完整的ASP.NET 2.0 URL重写方案[翻译]_实用技巧

这篇文章描述了一个完整的 ASP.NET 2.0 URL 重写方案.这个方案使用正则表达式来定义重写规则并解决通过虚拟 URLs 访问页面产生回发事件的一些可能的困难. 为什么要重写 URL ? 将 URL 重写方法应用到你的 ASP.Net 应用程序的两个主要原因是:可用性和可维护性. 可用性 谁都知道,相对于难于辨认的带参数的长的查询路径,用户更喜欢一些短的.简洁的 URL.任何时候,一个容易记住和敲入的路径比添加到收藏夹更有用.其次,当一个浏览器的收藏夹不可用时,记住的地址总比在搜索引擎中

asp.net中对URL的一些操作

编辑器加载中... 例如当前URI为:http://www.test.com/zzl/renren?id=1 获取绝对URI的路 System.Web.HttpContext.Current.Request.Url.AbsolutePath (/zzl/renren) 获取绝对URI System.Web.HttpContext.Current.Request.Url.AbsoluteUri (www.test.com/zzl/renren) 获取服务器的主机名或IP地址和端口号 System.

asp.net 2.0 中的URL重写以及urlMappings问题_实用技巧

在asp.net2.0中的urlMappings倒是非常好用,可惜暂不支持正则表达式,不过,好在如果用IHttpModule的话  不管什么样的请求都会先经过IHttpModule这样就为URL重写提供了一个好机会:  下面是我写的一个IHttpModule:  using System;  using System.Web;  public class ReWriteModule:IHttpModule  {  public ReWriteModule()  {  }  public over