url rewrite.docx

上传人:b****1 文档编号:2428435 上传时间:2022-10-29 格式:DOCX 页数:25 大小:158.68KB
下载 相关 举报
url rewrite.docx_第1页
第1页 / 共25页
url rewrite.docx_第2页
第2页 / 共25页
url rewrite.docx_第3页
第3页 / 共25页
url rewrite.docx_第4页
第4页 / 共25页
url rewrite.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

url rewrite.docx

《url rewrite.docx》由会员分享,可在线阅读,更多相关《url rewrite.docx(25页珍藏版)》请在冰豆网上搜索。

url rewrite.docx

urlrewrite

在ASP.NET中执行URL重写

发布日期:

8/23/2004|更新日期:

8/23/2004

ScottMitchell

4GuysFromR

适用范围:

Microsoft®ASP.NET

摘要:

介绍如何使用MicrosoftASP.NET执行动态URL重写。

URL重写是截取传入Web请求并自动将请求重定向到其他URL的过程。

讨论实现URL重写的各种技术,并介绍执行URL重写的一些实际情况。

下载本文的源代码。

本页内容

引言

URL重写的常见用法

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

实现URL重写

构建URL重写引擎

使用URL重写引擎执行简单的URL重写

创建真正“可删节”的URL

结论

参考资料

引言

让我们花点时间来看一下网站上的一些URL。

您是否发现一些类似于的URL?

或者,您可能将一系列网页从一个目录或网站移动到另一个目录或网站,结果导致已将旧URL用作书签的访问者断开链接。

在本文中,我们将了解如何通过将替换为类似于的网址,使用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,则用户可以访问以下网址:

创建具有此类URL的网站有两点不足:

首先,从最终用户的角度考虑,URL比较杂乱。

可用性专家JakobNeilsen建议遵循以下标准来选择URL:

∙简短。

∙易于键入。

∙可以看出站点的结构。

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

我还要增加一条标准,即,URL应该便于记忆。

URL不符合Neilsen的任何标准,也不容易记住。

要求用户键入查询字符串值将使URL的键入变得非常困难,并且只有了解查询字符串参数的用途及其名称/值对结构的富有经验的Web开发人员才能够对URL进行“删节”。

较好的方法是允许使用切合实际且容易记忆的URL,如URL,您便可以推断出将要显示的内容--有关Widget的信息。

此URL也很容易记住和共享。

我可以告诉我的同事“请查看URL是什么即可打开该页面。

(尝试一下,您只需说出“A页面”即可!

)此URL还将显示出来,并且应该是“可删节”的。

也就是说,如果用户删去URL的末端,键入

注意:

要获得“可删节”URL的最好示例,可考虑使用由许多blog引擎生成的URL。

要查看2004年1月28日的帖子,用户可以访问诸如的URL。

如果该URL被删节为2004年1月的所有帖子。

将该URL进一步删节为将显示2004年的所有帖子。

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

返回页首

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

在正式研究URL如何实现重写之前,应首先了解Microsoft®InternetInformationServices(IIS)如何处理传入请求,这一点非常重要。

当请求到达IISWeb服务器时,IIS检查被请求文件的扩展名以确定如何处理该请求。

IIS可以自行处理请求(如HTML页面、图像以及其他静态内容),或者将请求路由到ISAPI扩展。

(ISAPI扩展是一个处理传入Web请求的非托管编译类。

其任务是生成被请求资源的内容。

例如,当传入针对Info.asp网页的请求时,IIS会将此消息路由到asp.dllISAPI扩展。

然后,该ISAPI扩展将加载被请求的ASP页面,执行该页面,并将所呈现的HTML返回给IIS,然后,IIS将该HTML发送回请求客户端。

对于ASP.NET页面,IIS会将此消息路由到aspnet_isapi.dllISAPI扩展。

然后,aspnet_isapi.dllISAPI扩展将处理操作传递给托管的ASP.NET辅助进程,该辅助程序将处理请求,并返回ASP.NET网页的呈现HTML。

您可以自定义IIS,以指定扩展名与ISAPI扩展的映射关系。

图1显示了InternetInformationServices管理工具的“应用程序配置”对话框。

请注意,与ASP.NET有关的扩展名(.aspx、ascx、config、asmx、rem、cs、vb及其他)均已映射到aspnet_isapi.dllISAPI扩展。

图1.已配置的文件扩展名映射

讨论IIS如何管理传入请求稍稍超出了本文范围。

但是可以在MicheleLerouxBustamante的文章InsideIISandASP.NET中找到对此内容的深入讨论。

ASP.NET引擎仅处理那些扩展名已明确映射至IIS中的aspnet_isapi.dll的传入Web请求,了解这一点非常重要。

使用ISAPI筛选器检查请求

IIS除了可以将传入Web请求的文件扩展名映射到相应的ISAPI扩展之外,还将执行许多其他任务。

例如,IIS将尝试对发出请求的用户进行身份验证,并确定通过身份验证的用户是否有权限访问被请求的文件。

在处理请求的有效期内,IIS将经历几个状态。

在每个状态下,IIS都将引发可以使用ISAPI筛选器以编程方式进行处理的事件。

与ISAPI扩展一样,ISAPI筛选器是在Web服务器上安装的非托管代码块。

ISAPI扩展被设计为可以响应针对特定文件类型的请求。

另一方面,ISAPI筛选器还包含可以对IIS引发的事件进行响应的代码。

ISAPI筛选器可以截取甚至修改传入和传出的数据。

ISAPI筛选器可以应用于很多方面,包括:

∙身份验证和授权。

∙记录和监视。

∙HTTP压缩。

∙URL重写。

虽然ISAPI筛选器可用于执行URL重写,但本文将讨论如何使用ASP.NET实现URL重写。

不过,我们将对使用ISAPI筛选器与使用ASP.NET中的技术实现URL重写进行权衡。

请求进入ASP.NET引擎时将会发生什么情况

在ASP.NET之前,需要使用ISAPI筛选器来实现IISWeb服务器上的URL重写。

由于ASP.NET引擎与IIS非常相似,因此可以使用ASP.NET进行URL重写。

存在相似之处的原因在于ASP.NET引擎可以实现以下功能:

∙在处理请求时可以引发事件。

∙允许任意数量的HTTP模块处理所引发的事件,这与IIS的ISAPI筛选器相似。

∙将呈现被请求资源这项任务委托给HTTP处理程序,该处理程序与IIS的ISAPI扩展相似。

与IIS一样,ASP.NET引擎在请求的有效期内将会触发事件,通过发信号来表示其处理过程从一个状态改变为了另一个状态。

例如,当ASP.NET引擎首次响应请求时,BeginRequest事件将被触发。

接下来触发的是AuthenticateRequest事件,该事件在已建立用户标识时出现。

(此外,还有大量的其他事件:

AuthorizeRequest、ResolveRequestCache和EndRequest,等等。

这些事件属于System.Web.HttpApplication类;有关详细信息,请参阅位于以下网址的技术文档:

HttpApplicationClassOverview。

正如上一部分所讨论的,可以创建ISAPI筛选器以响应IIS引发的事件。

同样,ASP.NET提供了HTTP模块,该模块可以响应由ASP.NET引擎引发的事件。

可以将ASP.NETWeb应用程序配置为具有多个HTTP模块。

对于由ASP.NET引擎处理的每个请求,将初始化每个已配置的HTTP模块,并允许将事件处理程序绑定到处理请求期间所引发的事件。

请注意,对每个请求均使用了许多内置HTTP模块。

其中的一个内置HTTP模块是FormsAuthenticationModule,该模块首先检查是否使用了窗体身份验证,如果使用,将检查是否对用户进行了身份验证。

如果没有使用,会自动将用户重定向到指定的登录页面。

如上所述,通过使用IIS,传入请求将最终发送给ISAPI扩展,而ISAPI扩展的任务是返回特定请求的数据。

例如,在请求传统的ASP网页时,IIS将请求传递给a

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1