zoukankan      html  css  js  c++  java
  • [转] asp.net url重写

    本文介绍如何使用 ASP.NET 执行动态 URL 重写。URL 重写是截取传入 Web 请求并自动将请求重定向到其他 URL 的过程。讨论实现 URL 重写的各种技术,并介绍执行 URL 重写的一些实际情况。

    好了,闲话少述,言归正传。

    大家在网上看到不少诸如http://www.xundee.com/archiver/    

    http://www.xundee.com/list/33.html

    http://www.xundee.com/photo/25.html

    http://www.xundee.com/tuku/这种列表类型的url
    以及http://www.xundee.com/html/20081027/2555.shtml   http://www.xundee.com/html/20081218/17596.shtml

    等这种详细页面的url。

    首先感觉,这种urll很短,隐藏实际路径提高安全性;易于用户记忆和键入; 易于被搜索引擎收录。

    事实也正式如此,尤其便于搜索引擎收录以及提高安全(比如:注入攻击等)。


    当然,程序直接生成静态页面可以实现的,
    但是那样要生成很多这种页面以及文件夹,
    而且在数据量大的情况下生成是很浪费时间的,
    在这种情况下就要实现url重写了,当然url重写有很多种方法
    下面介绍的是基于asp.net下微软的url重写方法(URLRewriter方法)

    1.首先下载URLRewriter.dll,下载之后直接复制到你的网站的bin目录中
    下载地址  http://www.xundee.com/download/URLRewriter.rar
    2.配置你的web.config文件
    在<configuration>节点下加
    <configSections>
        <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
      </configSections>

    <RewriterConfig>
        <Rules>
         以下三个是我自己写的测试的,当然你可以写很多个,这些都是url重写的规则,根据你写的规则,实现不同的功能
         这个是把http://www.xundee.com/default.aspx?id=1 生成http://www.xundee.com/photo/25.html 这种页面
         <RewriterRule>
            <LookFor>~/photo/(\d{0,8})\.html</LookFor>
            <SendTo>~/list/photo.aspx?id=$1</SendTo>
          </RewriterRule>
        这个是把http://www.xundee.com/search/default.aspx 生成http://www.xundee.com/search.html 这种页面
           <RewriterRule>
            <LookFor>~/search\.html</LookFor>
            <SendTo>~/search/default.aspx</SendTo>
          </RewriterRule>
        这个是把http://www.xundee.com/list/default.aspx?id=10&page=1 生成http://www.xundee.com/list/10_1.html这种页面,分页的时候使用这种url重写规则
          <RewriterRule>
            <LookFor>~/list/(\d{0,8})_(\d{0,8})\.html</LookFor>
            <SendTo>~/list/default.aspx?id=$1&amp;page=$2</SendTo>
          </RewriterRule>

    注意在web.config中把&换为&amp;否则不能执行

        </Rules>

      </RewriterConfig>

    同时还要在<system.web>配置节下加
          <httpHandlers>
            <add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
            <add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
            <add verb="*" path="*" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />

          </httpHandlers>

    3.好了,基本上就可以了,但是还有重要一点千万不要忘了
    因为咱们重写的是诸如http://www.xundee.com/photo/25.html

    .html的后缀
    所以需要在iis中进行.html映射(如果咱们上面的链接不用html,直接使用aspx的,如:http://www.xundee.com/search/default.aspx这种的,就不用实现.html映射,当然,如果想使用别的后缀,如.do等,可以进行.do的映射),方法如下:
    右击站点-属性-主目录-配置
    在打开页面找扩展名.aspx,双击之后弹出窗口内复制可执行文件
    一般是C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll
    复制完之后点添加在弹出窗口把内容复制到可执行文件
    扩展名.html当然这个你可以任意写了,不过要和
    <add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
    保持一致.
    同时去掉确认文件是否存在,确定即可
    完成之后输入http://www.xundee.com/list/33.html
    是不是就可以访问了?爽吧

    4.下面介绍第三种情况,生成目录,诸如这种url:http://www.xundee.com/tuku/没有后缀名  http://www.xundee.com/search/?keywords=%u7684  也没有后缀名的url
    这里面稍微有点复杂,同样配置iis
    还是在那个弹出窗口,点插入
    把复制的文件即C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll
    复制到可执行文件框内,同时去掉确认文件是否存在,确定即可
    这样输入http://www.xundee.com/archiver/,是不是就可以访问了?嘿嘿
    可能读者会有疑问了:现在设置的这个和第二种设置的有什么区别?
    现在设置的其实是进行*映射,即把所有的文件都进行url重写处理程序处理
    这时其实就可以把.html 以及自带的.aspx等映射去掉,同样可以生成.html/.aspx/ url
    好了,如果还想其他的扩展大家就尽情扩展吧。

    5.现在再讲一下*映射要注意的问题
    因为*映射是把所有的文件都要交给url称谢程序去处理,这样就会造成会把站点下的图片以及css
    或者一些下载的rar等文件都要去处理,这样会慢吗?答案是毫无疑问的,肯定会增加内存的,
    单单一网站的图片以及上传的图片就足以让程序减慢成倍的速度了。
    那有什么办法进行处理吗?
    当然,我们可以进行以下处理就可以把速度还原了:
    方法1,把存放图片所在的文件夹转化成一个虚拟目录,在然后移处该虚拟目录*.*的映射,这样一来他的url重写程序就不会去处理图片文件,当然存放别的不需要url重写程序的文件也要象图片文件夹做类似的处理。
    虚拟目录设置办法:在iis站点右击目录点属性,目录-点创建
    然后点配置,在弹出窗口内删除:通配符应用程序映射(执行顺序)下添加的*.*的映射即可。
    方法2,把不需要*.*映射的文件夹设置新站点和原来的站点分开,这样在原来的站点访问的时候用
    新站点的域名即可。比如把图片设置站点http://images.xundee.com 这样在http://xundee.com站点访问图片的时候就必须使用http://images.xundee.com/图片名称.gif,这样就避免了所有问件处理。
    以上两种方法即可提高不少速度了,当然第一种药方便的多。

    6.最后处理回发,即是指当我们在一个经过url重写的页面的提交返回后,一般情况下又返回了真实的路径,而不是咱们处理过的url地址,这种情况就需要咱们在需要处理回发(即提交表单的页面)的页面加上以下代码即可:
    <script type="text/javascript">try{document.forms[0].action=""}catch(ex){}</script>
    放在<head></head>里面
    比如http://photo.xundee.com/photo/50/show_1.html  这个页面是经过url重写之后的,用户留言之后(提交表单)如果不做处理就变成了原始的路径了,如:http://photo.xundee.com/photo/Detail.aspx?ptid=50&page=1 所以我们要处理回发的情况。
    大家如果在本地测试的话,就不用诸如:http://www.xundee.com的地址,直接使用本地iis的配置即可测试。
  • 相关阅读:
    201521044091《Java程序设计》第7周学习总结
    201521044091《java程序设计》第四次总结
    201521044091 《java程序设计》第八周学习总结
    201521044091 《Java程序设计》第5周学习总结
    201521044091 《Java程序设计》第2周学习总结
    201521044091 《Java程序设计》第3周学习总结
    MySQL设置字符集CHARACTER SET
    Create My MySQL configuration by Percona
    How to use jQuery to manipulate Cookies
    How to use OpenXml to import xml data to Sql server
  • 原文地址:https://www.cnblogs.com/yeye518/p/2231685.html
Copyright © 2011-2022 走看看