您的位置:知识库 » .NET技术

重提URL Rewrite(4):不同级别URL Rewrite的一些细节与特点

作者: Jeffrey Zhao  来源: 博客园  发布时间: 2009-01-13 10:40  阅读: 4555 次  推荐: 0   原文链接   [收藏]  
摘要:不同级别URL Rewrite的一些细节与特点
[1] 对URL Rewrite功能上的要求
[2] 对URL中特殊字符的处理
[3] 出错页面配置

 

对URL中特殊字符的处理

  有些特殊字符是不允许出现在URL中的,或者一旦出现在URL里以后,请求的含义就被改变了。例如我们需要对搜索页面进行URL Rewrite,将“/Search/xxx”重写为“/Search.aspx?xxx”,然后可以根据问号后面的字符串获得用户提供的关键字。如果使用UrlRewriter.NET,我们就会使用如下的配置:

<rewriter>
  <rewrite url="^/Search/(.+)$" to="~/Search.aspx?$1" processing="stop" />
rewriter>

  普通情况下,这个URL Rewrite工作正常。但是如果用户使用“%” 作为关键字,情况就不一样了,因为我们会收到如下的错误页面提示:

Bad Request

  这是因为URL中是不允许出现“%”的。大家可以去各种网站上尝试着请求一些例如“ABC%25DEF”的路径(“%25”之后即为“%”),大都能发现“400 Bad Request”错误。不过将“%”放在Query String里倒是合法的——对阿,我们不是将keyword重写到Query String里了吗?为什么还是不行呢?这还是由于ASP.NET执行方式决定的。

IIS ASP.NET

  Bad Request是在上图的步骤3,也就是还在进行初始化的时候就被确定了。而我们的URL Rewrite是在第4步BeginRequest事件中才发生的。当请求中带有非法字符时,我们根本还没有机会进行URL Rewrite。

  那么我们怎么处理这个问题呢?在一般情况下,我们在客户端将%去除也不会有太大问题(有些站点的确是这么做的),但是如果非要保留呢?那么就使用Query String来传递参数吧,或者我们也可以使用IIS级别的URL Rewrite。还是以IIRF为例:

RewriteRule    ^/Search/(.+)$    /Search.aspx?$1      [I, L, U]

  当请求被发送到IIS之后(步骤一),并且在选择应该交给哪个ISAPI执行(步骤二)之前就发生了URL Rewrite。经过了URL Rewrite之后的地址,其中的“%”已经被转移到了Query String中,这时候交由ASP.NET处理时自然已经合法了。

 

0
0
标签:ASP.NET

.NET技术热门文章

    .NET技术最新文章

      最新新闻

        热门新闻