科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件在ASP.NET中实现Url Rewriting(八)

在ASP.NET中实现Url Rewriting(八)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

创建真正“隐蔽”的网址   上一节简单网址重写的示例展示了如何通过新的网址重写规则来轻松地配置网址重写引擎,本节将通过出众的正则表达式来展示网址重写的强大威力。

作者:中国IT实验室 来源:中国IT实验室 2007年8月31日

关键字: Rewriting URL ASP.NET

  • 评论
  • 分享微博
  • 分享邮件
创建真正“隐蔽”的网址

  上一节简单网址重写的示例展示了如何通过新的网址重写规则来轻松地配置网址重写引擎,本节将通过出众的正则表达式来展示网址重写的强大威力。

  时下正在流行Blog,很多人都拥有一个自己的Blog。不论你是否对Blog感到陌生,他们正在不断地更新自己的Blog页面,这些页面就像一个个人日记本一样。大多数Bloger只是简单地记录每天发生的事情,也有一些聚焦于某一主题,比如影评、球迷组织、电脑技术等。

  Blog可以在任何地点由作者进行更新,更新次数可以是一天多次,也可以是一周一两次。在Blog页面上只显示最近10条更新,但事实上所有的Blog软件都提供了存档记录,访客可以阅读其历史记录。有了“隐蔽”的网址,Blog应用程序将变得更加强大。假定你通过/2004/02/14.aspx来查询自己的Blog上的文章,你会为阅读到2004年2月14日的Blog感到惊讶吗?此外你可能为了访问2004年2月所有的Blog而将该地址裁减为/2004/02/,要访问2004年所有的Blog,你可能会试着去访问/2004/。

  在维护一个Blog的时候,如果将这种具有“隐蔽性”的网址提供给用户将会更好。实际上很多Blog引擎都提供了这种网址重写的功能,现在来看看这些是如何通过网址重写实现的。

  首先,我们需要一个页面能够分别按照年、月、日分别显示Blog的内容。假定现在已经做好了一个页面文件ShowBlogContent.aspx,它能分别获取年、月、日的查询参数,要查看2004年2月14日所发的帖子,我们可以访问/ShowBlogContent.aspx?year=2004&month=2&day=14,要浏览2004年2月的数据可以访问/ShowBlogContent.aspx?year=2004&month=2,要查询2004年所有数据可以访问/ShowBlogContent.aspx?year=2004。(在下载文件中提供ShowBlogContent.aspx源代码。)

  然后,当用户访问/2004/02/14.aspx时,我们需要将他访问的网址重写到/ShowBlogContent.aspx?year=2004&month=2&day=14上。这里需要制定三条网址重写规则:当指定访问年月日时、当指定访问年月时和当指定访问年时。

<RewriterConfig>
<Rules>
<!-- Rules for Blog Content Displayer -->
<RewriterRule>
<LookFor>~/(d{4})/(d{2})/(d{2}).aspx</LookFor>
<SendTo>~/ShowBlogContent.aspx?year=$1&month=$2&day=$3</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/(d{4})/(d{2})/Default.aspx</LookFor>
<SendTo><![CDATA[~/ShowBlogContent.aspx?year=$1&month=$2]]></SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/(d{4})/Default.aspx</LookFor>
<SendTo>~/ShowBlogContent.aspx?year=$1</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>

  这些网址重写规则展示了正则表达式的强大威力。第一条规则按照(\d{4})/(\d{2})/(\d{2})\.aspx模式进行查找,通俗的说,它查找是否包含匹配xxxx/xx/xx.aspx格式的字符串,其中x表示数字,每一组数字必须用圆括号括起来,这样可以在相应<SendTo>节内引用圆括号内的匹配字符串。我们可以使用$1、$2、$3来分别引用前面匹配的圆括号组,其中$1,$2,$3分别表示所匹配的第一、第二、第三个圆括号组。

  注意:由于web.config是XML格式的文档,所以在文本域内必须回避直接使用一些特殊字符,如:&,<和>符号等。在第一条网址重写规则的<SendTo>节中用&amp来表示引用&符号,在第二条网址重写规则的<SendTo>节中用<![CDATA[...]]>元素来表示其中所有的内容都是文本域,不再需要用转义字符来表示引用。这两种方法都可以实现同样的目的。

  下面图五、图六、图七都显示出网址重写的运行状况。这些数据都真实地摘自作者的Blog,图五显示2003年11月7日的帖子,图六显示所有2003年11月的帖子,图七显示2003年所有帖子。

按此在新窗口浏览图片
图五.显示2003年11月7日的帖子

按此在新窗口浏览图片
图六. 显示2003年11月所有的帖子

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章