教你如何实现URL重写(转发)


以下是你一个简单示例
一.新建一个空的网页项目程序:


二.将以下代码写在单独的类中,然后在页的CS文件中引入


using System;
using System.IO;
using System.Web;
using System.Web.UI;
namespace URL
{
    public class OLPage : Page
    {
        public OLPage()
        { }
        protected override void Render(HtmlTextWriter writer)
        {
            if (writer is System.Web.UI.Html32TextWriter)
            {
                writer = new FormFixerHtml32TextWriter(writer.InnerWriter);
            }
            else
            {
                writer = new FormFixerHtmlTextWriter(writer.InnerWriter);
            }
            base.Render(writer);
        }
    }


    internal class FormFixerHtml32TextWriter : System.Web.UI.Html32TextWriter
    {
        private string _url; // 假的URL


        internal FormFixerHtml32TextWriter(TextWriter writer)
            : base(writer)
        {
            _url = HttpContext.Current.Request.RawUrl;
        }


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


        }
    }


    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 encode)
        {
            if (_url != null && string.Compare(name, "action", true) == 0)
            {
                value = _url;
            }
            base.WriteAttribute(name, value, encode);
        }
    }


}
三.以WEB配置文件写成如下:
<?xml version="1.0"?>
<!--overred-->
<configuration>
    <configSections>
        <section name="RewriterConfig" 


type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter"/>
    </configSections>
    <RewriterConfig>
        <Rules>
            <RewriterRule>
                <LookFor>~/d(\d+)\.aspx</LookFor>
                <SendTo>~/default.aspx?id=$1</SendTo>
            </RewriterRule>
      <RewriterRule>
        <LookFor>~/d(\d+)\.html</LookFor>
        <SendTo>~/default.aspx?id=$1</SendTo>
      </RewriterRule>
        </Rules>
    </RewriterConfig>
    <system.web>
        <httpHandlers>
            <add verb="*" path="*.aspx" 


type="URLRewriter.RewriterFactoryHandler, URLRewriter"/>
      <add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter"/>
        </httpHandlers>
        <compilation debug="true"/></system.web>
</configuration>


四.将URLRewriter.dll文件下载,并将其放到要目录的BIN目录内


五.将要实现转发的页的CS文件的将继承改为url.OLPage
例:
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using URL;


public partial class _Default :URL.OLPage
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.QueryString.Count > 0)
        {
            Response.Write(Request.QueryString["id"].ToString());
        }
    }
}


最后,可以在将d4646.html或d454.aspx的页面转发到default.aspx?id=4646或default.aspx?id454
例:http://localhost:4875/URLRewriteTest2/d4546.html
实际为:http://localhost:4875/URLRewriteTest2/default.aspx?id=4546