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" />

  • 相关阅读:
    Android——继续深造——从安装Android Studio 2.0开始(详)
    PHP——安装wampserver丢失MSVCR110.dll
    Marza Gift for GDC 2016
    Retrieve OpenGL Context from Qt 5.5 on OSX
    Space Time Varying Color Palette
    Screen Space Depth Varying Glow based on Heat Diffusion
    Visualization of Detail Point Set by Local Algebraic Sphere Fitting
    Glass Dragon
    Jump Flood Algorithms for Centroidal Voronoi Tessellation
    京都之行
  • 原文地址:https://www.cnblogs.com/taiyonghai/p/5604238.html
Copyright © 2011-2022 走看看