zoukankan      html  css  js  c++  java
  • UrlRewriter配置IIS支持伪静态

    使用UrlRewriter时遇到了一些问题,在园子里的博问中找到了Astar的回答,防止以后找不到,就记录下来了。

    UrlRewriter.NET官方地址:http://urlrewriter.net/

    中文帮助中心:http://www.urlrewriter.cn/
    说明:UrlRewriter.NET提供了ASP.NET层面上的URL Rewriter

    配置:
    <!--设置地址重写组件-->
    <configSections>
      <section name="rewriter" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler,Intelligencia.UrlRewriter" />
    </configSections>
    <!--地址重写规则-->
    <rewriter>
      <rewrite url="^/User/(d+)$" to="~/User.aspx?id=$1" processing="stop" />
      <rewrite url="^/User/(w+)$" to="~/User.aspx?name=$1" processing="stop" />
    </rewriter>
    地址重写规则可以链接到外部XML文件:<rewriter file="~/App_Data/rewrite.xml"/>
    <?xml version="1.0" encoding="utf-8" ?>
    <rewriteRules>
     <rewrite url="^~/Article/([^.]+).html$" to="~/Article/Display.aspx?n=$1" />
    </rewriteRules>
     <!--httpModules-->
    <system.web>
      <httpModules>
        <add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule,Intelligencia.UrlRewriter" />
      </httpModules>
    </system.web>
    注意事项:
    processing="stop":UrlRewriter.NET 在找到一个匹配的重写规则时,不会就此停止,而会继续寻找其余的匹配项,最终生效的则是能够匹配当前请求的最后一个重写规则。如果我们需要 UrlRewriter.NET在找到某个匹配项之后即生效,就需要将processing属性设为stop。例如在上面的配置里,如果“/User/” 后紧跟着数字,则会使用用户ID进行查找,否则则认为当前所提供的是用户名。
    url中的正则必需用小刮号封起来,传入的URL要符合url中的设置规则例如:url="^~/Article/([^.]+).html$" 传入必需为fda.html,aaa.aspx即不行,修改正则式后要重新加载解决方案。
    入门篇:
       1. 简单实现/去掉问号
    <rewrite url="^~/Article/([^.]+).html$" to="~/Article/Display.aspx?n=$1" />
    说明:url的规则必需是“除了'.'号之外的任何字符加.html”,例:“abc.html”。
    实际地址:Disply.aspx?n=abc
       2. 无扩展名/任意扩展名
    <rewrite url="^~/Article/([^.]+)(..+?)?$" to="~/Article/Display.aspx?n=$1" />
    说明:maozhuxi maozhuxi.htm maozhuxi.html maozhuxi.asp .php maozhuxi.dfkwkfjkskdd
    实际地址:Display.aspx?n=maozhuxi
       3. 404检测
    <rewriteRules>
     <!-- 404检测: ~/Article/maozhuxi.html -->
     <if url="~/Article/maozhuxi.html" exists="~/Article/maozhuxi.html">
      <forbidden />
     </if>
     <rewrite url="^~/Article/([^.]+)(..+?)?$" to="~/Article/Display.aspx?n=$1" />
    </rewriteRules>
    存在:~/Article/maozhuxi.html,会显示:无法提供此类型的页
    不存在:~/Article/maozhuxi2.html,会显示:maozhuxi2
       4. 封IP
    <rewriteRules>
     <!-- 封IP: ~/Article/maozhuxi.html -->
     <if url="~/Article/maozhuxi.html" address="192.*">
      <redirect to="~/" />
     </if>
     <rewrite url="^~/Article/([^.]+)(..+?)?$" to="~/Article/Display.aspx?n=$1" />
    </rewriteRules>
    会封:~/Article/maozhuxi.html,会:跳转到主页(注意修改重写规则中的IP地址)
    不封:~/Article/maozhuxi2.html,会显示:maozhuxi2
       5. 字符串转换器的应用
        <!-- 字符串转换器的应用: ~/Article/毛主席.html -->
     <rewrite url="^~/Article/([^.]+?)1.html$" to="~/Article/Display.aspx?n=${lower($1)}" />
     <rewrite url="^~/Article/([^.]+?)2.html$" to="~/Article/Display.aspx?n=${upper($1)}" />
    转换为小写:~/Article/MAOZHUXI1.html,会显示:maozhuxi
    转换为大写:~/Article/maozhuxi2.html,会显示:MAOZHUXI
       6. 静态映射的应用
    <rewriteRules>
     <mapping name="aihao">
      <map from="1" to="看书" />
      <map from="2" to="抽烟" />
      <map from="3" to="玩游戏" />
     </mapping>
     <!-- 静态映射的应用: ~/Article/毛主席.html -->
     <rewrite url="^~/Article/([^.]+?)(d+?).html$" to="~/Article/Display.aspx?n=${aihao:$2|未知}" />
    </rewriteRules>
    ~/Article/maozhuxi1.html,会显示:看书 
    ~/Article/maozhuxi2.html,会显示:抽烟
    ~/Article/maozhuxi3.html,会显示:玩游戏
    ~/Article/maozhuxi4.html,会显示:未知

    进阶篇:
        1. 创建并使用自定义动作
    <rewriteRules>
     <!-- 注册动作解析器 -->
     <register parser="VMoom.Framework.HttpModules.UrlRewriter.RewriteActionParser, VMoom.Framework" />
     <rewrite url="^~/Article/([^.]+?)1.html$" to="~/Article/Display.aspx?n=$1" />
     <re url="^~/Article/([^.]+?)(d+?).html$" to="~/Article/Display.aspx?n=$1$2" />
    </rewriteRules>
       2. 创建并使用自定义条件
       3. 创建并使用自定义转换器

     (一)、扩展名不变的重写:
    重写规则:
    <add name="RewritePhoto" virtualUrl="^~/(d+).aspx"
         rewriteUrlParameter="ExcludeFromClientQueryString"
         destinationUrl="~/Default.aspx?ID=$1"
         ignoreCase="true" />
    IIS配置:(此配置应该为默认配置,但有的虚拟主机提供商修改了此配置)
    网站->属性->目录->配置(G)...->映射->应用程序扩展->扩展名 .aspx ->编辑->"确认文件是否存在"复选框不选
    (二)、伪静态重写,扩展名为.html等
    重写规则:
    <add name="RewritePhoto" virtualUrl="^~/(d+).html"
         rewriteUrlParameter="ExcludeFromClientQueryString"
         destinationUrl="~/Default.aspx?ID=$1"
         ignoreCase="true" />
    IIS配置:网站->属性->目录->配置(G)...->映射->应用程序扩展->添加
    可执行文件:c:windowsmicrosoft.netframeworkv2.0.50727aspnet_isapi.dll
    扩展名:.html
    动作:限制为 GET,HEAD,POST,DEBUG
    脚本引擎:选中
    确认文件是否存在:不选
    (三)、任意扩展名的重写 如:扩展名为.zxjay
    重写规则:
    <add name="Rewrite1" virtualUrl="^~/(d+).zxjay"
         rewriteUrlParameter="ExcludeFromClientQueryString"
         destinationUrl="~/Default.aspx?ID=$1"
         ignoreCase="true" /> 
    IIS配置:同上
    (四)、无后缀的重写
    重写规则:
    <add name="Rewrite1" virtualUrl="^~/(d+)/Default.aspx"
         rewriteUrlParameter="ExcludeFromClientQueryString"
         destinationUrl="~/Default.aspx?ID=$1"
         ignoreCase="true" />
    IIS配置:网站->属性->目录->配置(G)...->映射->通配符应用程序映射->插入
    可执行文件:c:windowsmicrosoft.netframeworkv2.0.50727aspnet_isapi.dll
    确认文件是否存在:不选
    其原理是:请求"当前目录"时,查找默认文档,实现重写,因此重写规则中的"^~/(d+)/Default.aspx"要与第一个默认文档相对应。
    关于“通配符应用程序映射”的详细信息可参考微软的说明
    (五)、二级域名到多级域名的重写
    (注意:由于条件的限制,该规则没有测试,理论上可以实现,如果有错误,请留言指正,谢谢!)
    重写规则:
    <add name="Rewrite1" virtualUrl="^http://(.*).xianfen.net/Default.aspx"
         rewriteUrlParameter="ExcludeFromClientQueryString"
         destinationUrl="~/Default.aspx?ID=$1"
         ignoreCase="true" />

  • 相关阅读:
    [Python] Marshmallow QuickStart
    [Python]Marshmallow 代码
    [python]Flask-migrate简单入门
    [数据库]Sqlite使用入门
    [Python] dict对象的keys()和values()返回的值,是否总是保证一一对应?
    【Weiss】【第03章】练习3.20:中缀表达式转后缀表达式
    【Weiss】【第03章】练习3.19:计算后缀表达式
    【Weiss】【第03章】练习3.18:检查平衡符号
    【Weiss】【第03章】练习3.17:懒惰删除
    【TIJ4】第六章全部习题【习题未完成】
  • 原文地址:https://www.cnblogs.com/taiyonghai/p/5604238.html
Copyright © 2011-2022 走看看