asp.net中URL重写(无后缀名的重写)

大家一定经常在网络上看到很多网站的地址后缀都是用XX.HTML或者XX.ASPX等类似静态文件的标示来操作的吧,那么大家有怀疑过他真的是一个一个的静态生成的文件么,静态文件的生成的优缺有好有坏,对于访问量很大的网站,利用静态文件可提高服务器的运行稳定和速度,坏处就是生成列表的时候会因为增加一条记录从而需要所有相关的列表进行重构,当然不排除有的公司已经攻克的这个问题,但对于大众程序员来说,他依旧是个问题,而且生成的化对于中小型网站也不一定会比动态的号,因为管理比较麻烦。

结构以上事实,然后伪静态技术产生了,规范的说就是URL重写技术,他对于ASPX格式支持最好,当然也可以重写HTML格式的文件,但这需要IIS的设置,相对比来说,ASPX格式的更方便,本站就是采用了该URL重写技术,这个技术优点显而易见:方便搜索引擎收录,方便查看,等等。那么接下来我们来看看如何配置他吧

首先、我们要用到URL重写组件:URLRewriter.rar

其次、需要在WEB.CONFIG里面进行些设置:

1、在Web.Config的<system.web>和</system.web>添加以下节点:

<httpModules>

  • <add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" /> </httpModules>
      2、在Web.Config的<configuration>和</configuration>添加以下节点:

       

      <configSections>

    1. <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" /> </configSections>
    2. <RewriterConfig>
    3. <Rules> <RewriterRule>
    4. <LookFor>~/Read(.[0-9]*)\.aspx</LookFor> <SendTo>~/read.aspx?id=$1</SendTo>
    5. </RewriterRule> <RewriterRule>
    6. <LookFor>~/Read,(.[0-9]*),(.[0-9]*)\.aspx</LookFor> <SendTo>
    7. <![CDATA[~/read.aspx?id=$1&SmallSortID=$2]]> </SendTo>
    8. </RewriterRule> </Rules>
    9. </RewriterConfig>
        设置完以上两个步骤,就基本可以运行了,其中<RewriterRule/>标签里面就是重写的一个模块,<LookFor/>里面的是重写后的地址,而<SendTo/>则是原地址。大家应该注意到了我写了2组<RewriterRule/>,其中第一组的是给单参数的地址用的,而另一组是给多参数动态文件用的。

         

        用此方法注意:

        1.不能使用Windows身份验证用户权限. 应使用Form验证,在web.config配置为:<authentication mode="Forms" />

        2.使用Request.ServerVariables["script_name"]获得的路径仍然是:ShowPlay.asp?vid=1

        3.被重写的地址如果回发,重写将失效 显示的地址将是ShowPlay.asp?vid=1

        4. 后缀名必须为.aspx.如果是其他自定义后缀名,如.net  请在iis将.net映射到aspnet_isapi.dll.这样.net请求才能

        到达asp.net引擎.

        另外的一些提示:

        很多朋友应该看到过类似这样的地址:

        http://nmju.net/read/2007/07/11/135645/

        其实这个也同样的重写,只是这个的使用必须要跟着建立相应的目录,譬如上面的这个地址,你必须要建立READ、2007、07、11、135645这些目录,虽然里面不需要存在文件,但建立还是有必要的

        (一)、扩展名不变的重写:

        重写规则:

        <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:\windows\microsoft.net\framework\v2.0.50727\aspnet_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:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll

        确认文件是否存在:不选

        (五)、二级域名到多级域名的重写

        (注意:由于条件的限制,该规则没有测试,理论上可以实现,如果有错误,请留言指正,谢谢!)

        重写规则:

        <add name="Rewrite1" virtualUrl="^http\://(.*).xianfen.net/Default.aspx"

             rewriteUrlParameter="ExcludeFromClientQueryString"

             destinationUrl="~/Default.aspx?ID=$1"

             ignoreCase="true" />

      1. posted @ 2009-09-04 15:14  永不放弃-Jack wu  阅读(2050)  评论(1编辑  收藏  举报