URL 重写

1. 下载URLRewriter.dll, 安装,编译,把生成的dll添加你的程序中.

2.修改web.config.

Web.Config
<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter"/>
</configSections>
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>~/(\d{4}).do</LookFor>
<SendTo>~/Default.aspx?year=$1</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
............
<httpModules>
<add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" />
</httpModules>

 

 3.需要重写的页面继承此BasePage,以免回发出错.

代码
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;
using System.IO;

namespace WCFWebClient
{
    
public class RewriterBasePage : Page
    {
        
protected override void Render(HtmlTextWriter writer)
        {
            
if (writer is System.Web.UI.Html32TextWriter)
            {
                writer 
= new FormFixerHrml32TextWriter(writer.InnerWriter);
            }
            
else
            {
                writer 
= new FormFixerHtmlTextWriter(writer.InnerWriter);
            }
            
base.Render(writer);
        }

        
protected override void OnError(EventArgs e)
        {
            Server.Transfer(
"Index.aspx");
        }
    }

    
internal class FormFixerHrml32TextWriter : System.Web.UI.Html32TextWriter
    {
        
private string _url;
        
internal FormFixerHrml32TextWriter(TextWriter writer)
            : 
base(writer)
        {
            _url 
= HttpContext.Current.Request.RawUrl;
        }

        
public override void WriteAttribute(string name, string value, bool fEncode)
        {
            
if (_url != null && string.Compare(name, "action"true== 0)
            {
                value 
= _url;
            }
            
base.WriteAttribute(name, value, fEncode);
        }
    }

    
internal class FormFixerHtmlTextWriter : System.Web.UI.HtmlTextWriter
    {
        
private string _url;
        
internal FormFixerHtmlTextWriter(TextWriter writer)
            : 
base(writer)
        {
            _url 
= HttpContext.Current.Request.RawUrl;
        }
        
public override void WriteAttribute(string name, string value, bool fEncode)
        {
            
if (_url != null && string.Compare(name, "action"true== 0)
            {
                value 
= _url;
            }
            
base.WriteAttribute(name, value, fEncode);
        }
    }
}

 4.配置IIS.

  

  

  可执行文件:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe

  扩展名:.html

  限制为: GET,HEAD,POST,DEBUG

  脚本引擎:勾选

  检查文件是否存在:不勾选

  保存完毕

posted @ 2010-11-22 22:26  枫轩  阅读(180)  评论(0)    收藏  举报