转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 站长学院 >> Web开发 >> 正文
在 ASP.NET 中执行 URL 重写         ★★★★

在 ASP.NET 中执行 URL 重写

作者:闵涛 文章来源:闵涛的学习笔记 点击数:3536 更新时间:2009/4/23 10:45:28
匹配组。

注意:由于 Web.config 文件采用 XML 格式,但是必须对元素文字部分中的字符(如 &、< 和 >)进行转义。在第一个规则的 <SendTo> 元素中,& 被转义为 &amp;。在第二个规则的 <SendTo> 中使用了另外一种技术(使用 <![CDATA[...]]> 元素),无需对内部的内容进行转义。可以使用两种方法中的任何一种,并且都会得到相同的结果。

图 5、6 和 7 显示了操作中的 URL 重写。数据实际上是从我的 blog http://scottonwriting.net/ 中拖过来的。图 5 中显示了 2003 年 11 月 7 日的帖子;图 6 中显示了 2003 年 11 月的所有帖子;图 7 显示了 2003 年的所有帖子。


5. 2003 年 11 月 7 日的帖子


6. 2003 年 11 月的所有帖子


7. 2003 年的所有帖子

注意:URL 重写引擎在 <LookFor> 元素中需要使用正则表达式模式。如果您对正则表达式不熟悉,可以阅读我在早些时候编写的一篇文章 An Introduction to Regular Expressions。另外,还有一个很好的网站:RegExLib.com,在那里您可以获取有关常用正则表达式的帮助信息,还可以共享您自己的自定义正则表达式。

构建必备的目录结构

当请求 /2004/03/19.aspx 时,IIS 将通知 .aspx 扩展,并将请求路由到 ASP.NET 引擎。请求在 ASP.NET 引擎的管道中移动时,URL 将被重写为 ShowBlogContent.aspx?year=2004&month=03&day=19,并且访问者会看到 2004 年 3 月 19 日的 blog 条目。但是当用户浏览到 /2004/03/ 时将会发生什么情况呢?除非有一个 /2004/03/ 目录,否则 IIS 将返回一个 404 错误。此外,此目录中还需要具有 Default.aspx 页面,以便可以将请求传递给 ASP.NET 引擎。

因此,要使用这种方法,必须手动创建一个用于每年的目录(其中包含 blog 条目),并且目录中具有一个 Default.aspx 页面。另外,在每年目录中,您需要再手动创建十二个目录(01、02、?、?...、12),并且每个目录中均有一个 Default.aspx 文件。(如上所述,我们还必须执行前面演示中的操作,即在 /Products/ 目录中添加一个 Default.aspx 文件,以便访问 /Products/ 时可以正确显示 ListCategories.aspx。)

很显然,添加这样一个目录结构可能是一件很痛苦的事情。解决此问题的方法是使所有传入的 IIS 请求都映射到 ASP.NET 引擎。通过这种方法,即使访问 URL /2004/03/,IIS 也会如实地将请求传递给 ASP.NET 引擎(即使并不存在 /2004/03/ 目录)。但是,使用这种方法将使 ASP.NET 引擎负责处理到达 Web 服务器的所有类型的传入请求,包括图像、CSS 文件、外部 JavaScript 文件、Macromedia Flash 文件,等等。

对处理所有文件类型的全面讨论远远超出了本文的范围。有关使用此技术的 ASP.NET Web 应用程序的示例,请参阅 .Text,一个开放源 blog 引擎。.Text 可以配置为将所有请求均映射到 ASP.NET 引擎。它可以使用自定义 HTTP 处理程序来处理生成所有文件类型的问题,自定义 HTTP 处理程序了解如何生成典型的静态文件类型(图像、CSS 文件,等等)。

返回页首

结论

在本文中,我们讨论了如何在 ASP.NET 级别通过 HttpContext 类的 RewriteUrl() 方法来执行 URL 重写。正如我们所看到的,RewriteUrl() 更新了特定的 HttpContext''''s Request 属性,从而更新了被请求的文件和路径。最终结果是,从用户角度来看,他们要访问某个特定的 URL,但从 Web 服务器端来看,被请求的却是另一个 URL。

可以在 HTTP 模块或 HTTP 处理程序中重写 URL。在本文中,我们介绍了如何使用 HTTP 模块执行重写,并讨论了在管道中的不同阶段执行重写的结果。

当然,如果执行 ASP.NET 级别的重写,则仅当已成功地将请求从 IIS 传递给 ASP.NET 引擎后才会发生 URL 重写。实际上,只有用户请求带 .aspx 扩展名的页面时才会出现这种情况。但是,如果您要使用户可以进入实际并不存在的 URL,但又希望重写到现有的 ASP.NET 页面,则必须创建虚拟目录和 Default.aspx 页面,或者对 IIS 进行配置,以使所有传入请求一律被路由到 ASP.NET 引擎。

返回页首

参考资料

ASP.NET:Tips, Tutorials, and Code

Microsoft ASP.NET Coding Strategies with the Microsoft ASP.NET Team

Essential ASP.NET with Examples in C#

参考资料

URL 重写是涉及到 ASP.NET 和竞争服务器端 Web 技术的一个主题。例如,Apache Web 服务器提供了名为 mod_rewrite 的 URL 重写模块。Mod_rewrite 是一个功能强大的重写引擎,提供了基于条件(如 HTTP 标题和服务器变量)的重写规则以及使用正则表达式的重写规则。有关 mod_rewrite 的详细信息,请查阅 A User''''s Guide to URL Rewriting with the Apache Web Server

还有许多有关使用 ASP.NET 执行 URL 重写的文章。Rewrite.NET - A URL Rewriting Engine for .NET 对创建模拟 mod_rewrite 正则表达式规则的 URL 重写引擎进行了介绍。URL Rewriting With ASP.NET 为 ASP.NET 的 URL 重写功能提供了很好的概述。Ian Griffiths 包含一个 blog entry,介绍了有关使用 ASP.NET 进行 URL 重写的一些注意事项(如在本文中讨论过的回发问题)。Fabrice Marguerie (read more) 和 Jason Salas (read more) 具有有关使用 URL 重写来增强搜索引擎定位功能的 blog 条目。

作者简介

Scott Mitchell 著有五本书,他还是 4GuysFromRolla.com 网站的创建者。在过去五年中,他一直从事 Microsoft Web 技术方面的研究工作。Scott 是一位独立的顾问、培训师和作家。您可以通过 mitchell@4guysfromrolla.com 与作者进行联络,或者通过作者的 blog 进行联络,其网址是:http://scottonwriting.net/

上一页  [1] [2] [3] [4] 


[常用软件]双剑合璧 在Win XP下刻录音乐CD  [VB.NET程序]在 VB 中使用 Unicode API
[VB.NET程序]vb调用winInet API接口post数据到指定的url  [VB.NET程序]在 VB5.0中编辑数据库和电子表格
[VB.NET程序]在 VB 中 引 用 .dbf 及 索 引 文 件  [Delphi程序]FAQ:如何从URL取得其在Internet Cache中的文件名
[Delphi程序]在 NT 内核的操作系统上实现系统关闭  [Delphi程序]MSN / QQ 中的动画表情 在Delphi中RichEdit的实现…
[Delphi程序]在 程 序 中 加 入 英 文 朗 读 功 能  [VB.NET程序]在 Visual Basic 2005 中使用 My.Settings
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Web开发  · 网页制作
    · 平面设计  · 网站运营
    · 网站推广  · 搜索优化
    · 建站心得  · 站长故事
    · 互联动态
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台