Url 重写

1. 利用Intelligencia.UrlRewriter.dll

     (1)在webconfig配置如下

      

代码
       < configSections >
      
<!-- 设置地址重写组件 -->
      
< section  name ="rewriter"  requirePermission ="false"  type ="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter"   />


     
</ configSections >
      
<!-- 地址重写规则 -->
      
< rewriter  file ="~/App_Data/rewrite.xml" >
      
</ rewriter >

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

      (2)配置重写规则

  

<? xml version="1.0" encoding="utf-8"  ?>
< rewriteRules >
  
<!-- 外层 -->
  
< rewrite  url ="~/Default.do"  to ="~/Default.aspx"  processing ="stop"   />
</ rewriteRules >

2. 利用 UrlRewriter.dll

    (1)在webconfig配置如下

     

代码
  < configSections >
    
< section  name ="CustomConfiguration"  type ="URLRewriter.Config.UrlsSection, URLRewriter" />
 
</ configSections >

  
< CustomConfiguration >
    
< urls >
    
< add  virtualUrl ="~/Login.do"  destinationUrl ="~/Login.aspx" />
    
</ urls >
  
</ CustomConfiguration >

      

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


 以上都必须解决页面回发的问题

  第一种方法:

  添加 Form.browser 

代码
<!--
可在 
< windir > \Microsoft.NET\Framework\ < ver > \CONFIG\Browsers 中找到现有的浏览器定义
-->
< browsers >


  
< browser refID = " Default " >

    
< controlAdapters >
      
< adapter controlType = " System.Web.UI.HtmlControls.HtmlForm "
                adapterType
= " Sample.Web.UI.Adapters.FormRewriterControlAdapter "   />
    
</ controlAdapters >
  
</ browser >
</ browsers >

  添加类FormRewriterControlAdapter.cs

代码
using  System;
using  System.Data;
using  System.Configuration;
using  System.Linq;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.HtmlControls;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Xml.Linq;


namespace  Sample.Web.UI.Adapters
{
    
///   <summary>
    
///   该类处理url重写后页面回发的问题
    
///   </summary>
     public   class  FormRewriterControlAdapter :System.Web.UI.Adapters.ControlAdapter
    {
        
protected   override   void  Render(HtmlTextWriter writer)
        {
            
base .Render( new  RewriteFormHtmlTextWriter(writer));
        }
    }

    
public   class  RewriteFormHtmlTextWriter : HtmlTextWriter
    {
        
public  RewriteFormHtmlTextWriter(HtmlTextWriter writer):  base (writer)
        {
            
this .InnerWriter  =  writer.InnerWriter;
        }

        
public  RewriteFormHtmlTextWriter(System.IO.TextWriter writer):  base (writer)
        {
            
this .InnerWriter  =  writer;
        }

        
public   override   void  WriteAttribute( string  name,  string  value,  bool  fEncode)
        {
            
if  (name  ==   " action " )
            {
                HttpContext context 
=  HttpContext.Current;

                
if  (context.Items[ " ActionAlreadyWritten " ==   null )
                {
                    value 
=  context.Request.RawUrl;
                    context.Items[
" ActionAlreadyWritten " =   true ;
                }
            }
            
base .WriteAttribute(name, value, fEncode);
        }
    }
}

  第二种方法  需要多调用一个 ActionlessForm.dll

  添加 BrowserFile.browser

代码
<!--
可在 
< windir > \Microsoft.NET\Framework\ < ver > \CONFIG\Browsers 中找到现有的浏览器定义

-->
< browsers >
    
< browser id = " NewBrowser "  parentID = " Mozilla " >
        
< identification >
            
< userAgent match = " Unique User Agent Regular Expression "   />
        
</ identification >

        
< capture >
            
< userAgent match = " NewBrowser (?'version'\d+\.\d+) "   />
        
</ capture >

        
< capabilities >
            
< capability name = " browser "  value = " My New Browser "   />
            
< capability name = " version "  value = " ${version} "   />
        
</ capabilities >
    
</ browser >

    
< browser refID = " Mozilla " >
        
< capabilities >
            
< capability name = " xml "  value = " true "   />
        
</ capabilities >
    
</ browser >
</ browsers >

  让模板页继承一个Form 模板页需添加的代码为

 

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

< skm:Form ID = " Form2 "  method = " post "  runat = " server "  enctype = " multipart/form-data " >

</ skm:Form >

  这样做一个坏处就是拆分的时候您看不到内容。

 

  另外要给IIS添加相应的配置 。

  注: 例子

      参考:1.Intelligencia.UrlRewriter相关资源整理

 3.10 补充:还有一个问题必须提到的就是重写规则的配置:

   (1)如果您的.css  .js 等文件无法访问,可以添加上

     <rewrite  url="^(/.+(\.gif|\.png|\.jpg|\.ico|\.css|\.js)(\?.+)?)$" to="$1" processing="stop" /> 

   (2)记得在配置重写规则的时候添加上 $ 终止符

     如:  <rewrite url="~/(\d)$" to="~/MySpace/Space/Space.aspx?UserId=$1" processing="stop" />

 

     我原来配置为 <rewrite url="~/(\d)" to="~/MySpace/Space/Space.aspx?UserId=$1" processing="stop" />

 

     发现当访问 http://www.dudu.com/481 与 http://www.dudu.com/sdfds/481 都可以指定到 Space.aspx。

     

你可能感兴趣的:(url)