zoukankan      html  css  js  c++  java
  • 使用UrlRewriter进行Url重写实现伪静态的完整解决方案

    所谓的伪静态页面,就是指的URL重写,在ASP.NET中实现非常简单首先你要在你的项目里引用两个DLL:ActionlessForm.dll、URLRewriter.dll,真正实现重写的是 URLRewriter.dll   但是如果你要实现分页,那么必须使用这个ActionlessForm .dll。文件下载见文章底部。现在来看操作步骤:

      第一步,下载组件,把UrlRewriter.dll 复制到你的项目 bin 目录下。

      第二步,在Web.config中的<configuration>内加入:

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

       <httpModules>
          <add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" />
       </httpModules>

       <!-- 下面是配置重写URL规则 -->

            <RewriterConfig>
              <Rules>
                <RewriterRule>
                  <LookFor>~/Products/Jurisdiction_(\w{3})\.aspx</LookFor>
                  <SendTo>~/En/Jurisdiction.aspx?jurid=$1</SendTo>
                </RewriterRule>

                <RewriterRule>
                  <LookFor>~/Articles/(\d{1,})\.aspx</LookFor>      <!-- 这个是被代替后的文件名,使用到正则表达式 -->
                  <SendTo><![CDATA[~/Article_view.aspx?article_id=$1]]></SendTo>      <!-- 这个是要给代替的网页,一般是带有问号后面带参数的网页 -->
                </RewriterRule>
                <RewriterRule>
                  <LookFor>~/Articles/(\d{1,})_(\d{1,})\.aspx</LookFor>
                  <SendTo><![CDATA[~/Article_view.aspx?article_id=$1&page=$2]]></SendTo>
                </RewriterRule>
                <RewriterRule>          
                  <LookFor>~/Sell/(.[0-9]*).html</LookFor>
                  <SendTo>~/Search/Search_Sell.aspx?id={GetProperty(Content)}</SendTo>
                </RewriterRule>
              </Rules>
            </RewriterConfig>

      这样比如上面的网址 http://www.bingd.com/Article_View.aspx?article_id=9 就可以用 http://www.bingd.com/Articles/9.aspx 来代替,当然,你代替后的扩展名可以用任何iis能解释的扩展名,如果你喜欢用htm做扩展名,那么在配置转发规则上面配置为htm为扩展名的(html扩展的继续走第四步骤),同样有些文章可能很长,往往我们会把一个文章分成几页,那么根据上面的配置,我们如果想访问 http://www.bingd.com/Article_View.aspx?article_id=9&page=3 我们就可以用 http://www.bingd.com/Articles/9_3.aspx 来代替,这样当搜索引擎来抓起你的网页的时候,就会收录你这些网址下去,别人搜索到你网页的时候,就可以从这些地址链接过来

      第三步,加入模块配置(写在<system.web>里面):

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

            如果用的是IIS7.0,则不用这么麻烦,这个步骤可以简化为:直接在web.config中的节的节中添加上UrlRewriter:

            <add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>

            这会保证所有的请求都会经过asp.net的这个Module。

      第四步,将HTML的解析用 asp.net 的ISAPI来解析(htm或其它后缀操作方法相同):

      1、打开IIS管理,右击站点属性。
      2、切换到“主目录“,点“配置“按纽.
      3、打开应用程序配置,点”添加“按纽.
      4、在可执行文件处输入ASP.NET的映射文件,可复制.ASPX的映射:如.net 2.0的:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll
      在扩展名处输入:.html,动作限制为:GET,HEAD,POST,DEBUG ,取消”检查文件是否存在“选项。

      如果你的页面有回传。比如说放了DATAGRID,有分页的,你点到下一页就发现,晕倒,又出问题了。这下怎么办呢,这个其实微软件的网站上就有说到,我在这里简述一下了。

      第五步,加入窗体回传保持的组件:

      下载 ActionlessForm.dll 放到你的项目 bin 目录下。然后在你的这个页面中加入:

      <%@ Register TagPrefix="skm" Namespace="ActionlessForm" Assembly="ActionlessForm" %>

      再把你的<Form...>改为:

      <skm:Form id="你的表单名" method="post" runat="server">……</skm:Form>

    UrlRewriter.dll下载地址:http://urlrewriter.net/

    MS 的 URLRewriter.dll(包含ActionlessForm.dll):http://download.microsoft.com/download/0/4/6/0463611e-a3f9-490d-a08c-877a83b797cf/MSDNURLRewriting.msi

    来源冰点网络菜园:http://www.bingd.com/ , 原文地址:http://www.bingd.com/blog/html/UrlRewriter.htm

  • 相关阅读:
    Java中的Date类型无法赋值给数据库的datetime类型
    在HTML中改变input标签中的内容
    sizeof计算类的大小
    UML类图,转载
    大端小段详解—转载
    leetcode练习
    linux基础
    排序算法和查找算法

    链表
  • 原文地址:https://www.cnblogs.com/antyi/p/2586004.html
Copyright © 2011-2022 走看看