IIS7 Asp.net使用URLRewriter做伪静态(完整代码示例)

简单介绍

通常我们为了增强搜索引擎的友好和提高用户体验,都会将文章内容生成静态页面,但是很多时候我们需要实时的显示以下信息,这样静态的页面就不太好处理了。当然我们也可是使用js来动态加载静态页面的数据,不过那样操作既费时也费力不划算,所以这里我们产生伪静态这种技术,他是介于静态和动态之间的,依靠技术将页面伪装成静态但本质却是动态的。

操作方法

目前Asp.net实现伪静态的方法也有好几种,但这我只介绍其中一个比较常用、使用也方便的方法:URLRewriter

URLRewriter 具有以下优点:

  • 兼容性好,微软出品适用于多种场合
  • 操作简单,只需要引入DLL,配置好相关规则
  • 无需修改iis,这点对于使用虚拟主机的朋友尤为重要,因为空间商是不会把修改iss的权限给你的。 

1、下载 URLRewriter 引入到项目中, 下载DLL文件 。如果不想在下载的朋友可以直接下载我的代码示例,里面有dll文件。

2、把dll文件引用到项目中。

3、配置Web.config,下面是我完整的Web.config配置,具体的说明上面也有。

<?xml version="1.0" encoding="utf-8"?>
 
<!--
  有关如何配置 ASP.NET 应用程序的详细信息,请访问
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
 
<configuration>
   <!--第一步: 设置自定义配置节和处理程序声明 -->
  <configSections>
    <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
  </configSections>
 
  <!--第二步:设置重写规则-->
  <RewriterConfig>
    <Rules>
       <!---规则解释:
              1、每个“<RewriterRule>.....</RewriterRule>”表示一个规则,可以写多个规则,但是需要注意从上向下匹配的。
              2、<LookFor> 节点表示:需要匹配的模式的,也就是页面访问的来源地址
              3、<SendTo> 节点表示:跳转的规则,我们实际跳转的页面地址
              4、注意编写正则表达式, (.*):表示正则表达式 ,意思:“.”匹配除“\n”之外的任何单个字符,“*”表示不限制匹配次数。
              5、$1、$2等等表示占位符,上下应该对应    
              6、尽量将复杂的规则写在上面。
       -->
      <!--规则一: 传递多个参数,使用注意位置对应-->
      <RewriterRule>
        <LookFor>~/Pages/(.*)/(.*)</LookFor>
        <SendTo>~/Pages/Detail.aspx?p=$1&m=$2</SendTo>
      </RewriterRule>
 
      <!--规则二:传递单个参数-->
      <RewriterRule>
        <LookFor>~/Pages2/(.[0-9]*)\.html</LookFor>
          <SendTo>~/Pages2/Detail.aspx?id=$1</SendTo>
      </RewriterRule>
 
      <!--规则三:带目录访问-->
      <RewriterRule>
        <LookFor>~/Pages/(.*).html</LookFor>
        <SendTo>~/Pages/$1.aspx</SendTo>
      </RewriterRule>
 
      <!--规则四:根目录访问
          这个规则的解释:如果访问根目录下面的任何页面,将跳转到相对应的aspx页面,
          比如:输入index.html实际访问的就是index.aspx,about.html实际访问的是about.aspx。
          -->
      <RewriterRule>
        <LookFor>~/(.*).html</LookFor>
        <SendTo>~/$1.aspx</SendTo>
      </RewriterRule>
 
  </Rules>
</RewriterConfig>
 
  <system.web>
      <compilation debug="true" targetFramework="4.5" />
      <httpRuntime targetFramework="4.5" />
   </system.web>
 
 
  <system.webServer>
 
    <!---第三步: 这里指明不检查  <system.web> 节点。 这里是用IIS7.0及以上版本,所以这里需要声明,如果是以下版本配置方法是不一样的。
                         如果未配置这个会提示“检测到在集成的托管管道模式下不适用的 ASP.NET 设置 ”错误-->
    <validation validateIntegratedModeConfiguration="false"/>
 
    <!---第四步:设置模块-->
    <modules>
      <add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" />
    </modules>
  </system.webServer>
</configuration>

下载完整代码示例 

代码开发环境:VS2012,本地调试iis7,Web应用程序

注意事项:

如果部署到服务器上提示”检测到在集成的托管管道模式下不适用的 ASP.NET 设置“,请将服务器.Net FrameWork版本设置为V4.0/V4.5(集成),一般空间商都支持版本切换的。

发布者:IT柚子,转转请注明出处:https://ityouzi.com/archives/iis7-aspnet-urlrewriter.html

(1)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
IT柚子的头像IT柚子
上一篇 2019年3月30日 下午9:45
下一篇 2019年3月30日 下午9:50

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注