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

本文介绍如何使用URLRewriter库在ASP.NET应用中进行URL重写,通过实例展示了如何配置并实施重写规则,使旧链接可以无缝跳转到新的页面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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


二.将以下代码写在单独的类中,然后在页的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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值