ASP.NET URL重写(伪静态)

1.下载URLRewriter

下载URLRewriter.dll,并在项目中引入程序集URLRewriter,即在网站的Bin文件夹中添加URLRewriter.dll。

或者安装服务器中安装urlrewrite2

2.在web.config中的configuration节点下添加URLRewriter的配置,注意:configSections必须是configuration节点下的第一个子元素。

<configSections>
    <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter"/>
</configSections>

3.配置伪静态规则

  • appendQueryString="false"这个控制是否传递get参数
<system.webServer>
    <rewrite>
      <rules>
        <rule name="Rule1">
          <match url="^123_t([0-9]+)\.html$" ignoreCase="false" />
          <action type="Rewrite" url="Default.aspx?id={R:1}" appendQueryString="false" />
        </rule>
        <rule name="Rule2">
          <match url="^123.html" ignoreCase="false" />
          <action type="Rewrite" url="Default.aspx" appendQueryString="false" />
        </rule>
        <rule name="Rule3">
          <match url="^job/l-([0-9]+)-([0-9]+)\.html$" ignoreCase="false" />
          <action type="Rewrite" url="JobList.aspx?id={R:1}&page={R:2}" appendQueryString="false" />
        </rule>
         <!--首页重写-->
         <rule name="index" stopProcessing="true">
          <match url="^(|/)$" />
          <action type="Rewrite" url="/views/Index.html" />
        </rule> 
        <!--带字母重写-->
        <rule name="artlist3">
          <match url="^yanjiusheng/([a-z]+)/$" ignoreCase="false" />
          <action type="Rewrite" url="ArticlePage/List/1/0/{R:1}/" appendQueryString="false" />
       </rule>
       <!--万能字符匹配-->
       <rule name="shijuan">
          <match url="^shijuan/school/([\s\S]*?).html$" ignoreCase="false" />
          <action type="Rewrite" url="SchoolPage/Judge/{R:1}" appendQueryString="false" />
        </rule>
      </rules>
    </rewrite>
    <validation validateIntegratedModeConfiguration="false" />
  </system.webServer>

补充:网上也有另一种配置方法,这里也贴下,引用的dll也是一样的,如下

<configSections>
    <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>
    <RewriterConfig>
    <Rules>
        <RewriterRule>
            <LookFor>~/Index.html</LookFor>
            <SendTo>~/Index.aspx</SendTo>
        </RewriterRule>
        <RewriterRule>
            <LookFor>~/Index/t_([0-9]*)/ID_([0-9]*).html$</LookFor>//如:http://localhost:60948/Index/t_8/ID_456.html
            <SendTo>~/Index.aspx?type=$1&id=$2</SendTo>s
        </RewriterRule>
    </Rules>
</RewriterConfig>
<system.web>
    <httpHandlers>
        <add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
        <add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
    </httpHandlers>
    <compilation debug="true" targetFramework="4.5"/>
    <httpRuntime targetFramework="4.5"/>
</system.web>
<system.webServer>
    <handlers>
        <add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler,URLRewriter" name="urlrewriter"/>
    </handlers>
    <validation validateIntegratedModeConfiguration="false" />
</system.webServer>

url重写规则说明:

  • 可出现多次,每个重写规则都需要添加一个节点。
  • 在获得匹配节点的url后,转向到相应的节点的url。
  • 中可使用正则表达式来表示参数。路径转向后,节点中的占位符$1将会用节点中正则表达式所匹配的参数来替换。
  • 配置中的url占位符可出现多个,如:$2、$3,占位符将按顺序依次由节点中则表达式所匹配的参数来替换。

如果涉及到反代,那么需要先安装requestRouter_amd64,然后开启反代,反代才会生效。这是一个大坑。


THE END
分享
二维码
< <上一篇
下一篇>>