zoukankan      html  css  js  c++  java
  • URLRewriter实现机制

         ms的URLRewriter可实现地址重定向,在网站建设中很容易被搜索引擎收录,而且方便有记忆有统一风格。MS的URLRewriter使用方法可查资料,本文主要讨论URLRewriter实现,URLRewriter还有一个不方便之处就是只可对单一的文件类型过滤跳转。在自己实现URLRewriter时改造这个问题。

    <httpHandlers>
    <add verb="*" path="*.aspx"
    type
    ="URLRewriter.RewriterFactoryHandler, URLRewriter"/>
    </httpHandlers>

          一个网站中可能要对多种类型扩展名的地址进行重定向,用HttpHandler对指定扩展名进行截取处理,在很多项目中也许不是最佳的处理,还有一点地址重定向页很多,单设一个配置文件进行。全部放在web.config里太乱了,而且效率不高。

         可以考虑在HttpModule BeginRequest中处理当得到一个来自客户端请求时。
    1,过滤扩展名(如果不是指定扩展名的早早抛出)
    2.初始化配置文件(读取自定义配置信息)
    3.对地址进行正则表达式配对处理。
    4.关键一步Match.Result 处理得到就是一个转向地址

    几点说明,
    1.得到请求原地址信息 Request.rawUrl
    2.内部地址跳转context.Rewritepath
    3.Match.Result 返回已传递的替换模式的扩展。例如,如果替换模式为 $1$2,则 Result 返回 Groups[1].Value 和 Groups[2].Value(MSDN)
    4.自定义URLRewriter时对MS的原配置文件改造一下 如下

    代码
    <Rules AllowExtension="aspx,htm">
    <RewriterRule>
    <LookFor>~/WebForm2_(\d{5,8}|[a-z0-9_]+)/discussion/?$</LookFor>
    <SendTo>~/ajax/WebForm1.aspx?movieid=$1&amp;pageIndex=1</SendTo>
    </RewriterRule>
    </Rules>

        AllowExtension 属性是充许跳转的扩展名,其它类型不进行地址重定向。

    代码
    foreach (RewriteRule rule in rules)
    {
    Match m
    = rule.LookForRegex.Match(context.Request.AppRelativeCurrentExecutionFilePath);
    if (m.Success)
    {
    string sendTo = m.Result(rule.SendTo);

    if (context.Request.QueryString.Count >0)
    {
    if (sendTo.IndexOf('?') !=-1)
    sendTo
    +="&"+ context.Request.QueryString.ToString();
    else
    sendTo
    +="?"+ context.Request.QueryString.ToString();
    }
    context.RewritePath(sendTo);
    break;
    }
    }

      RewriteRule 里面就是读取到配置信息,包括了全部LookFor SendTo,当然最后把传入参数并到sendto上。

  • 相关阅读:
    RUST实践.md
    redis.md
    opencvrust.md
    aws rds can't connect to mysql server on 'xx'
    Foundation ActionScript 3.0 With Flash CS3 And Flex
    Foundation Flash Applications for Mobile Devices
    Flash Mobile Developing Android and iOS Applications
    Flash Game Development by Example
    Actionscript 3.0 迁移指南
    在SWT中非UI线程控制界面
  • 原文地址:https://www.cnblogs.com/shouhongxiao/p/1728325.html
Copyright © 2011-2022 走看看