URL重写

 Web.Config文件的设置:

   <httpModules>
      <add type="myHttpModule.HttpModule" name="HttpModule" />
    </httpModules> 

主要代码:

using System;
using System.Diagnostics;
using System.Threading;
using System.Web;
using System.Xml;
using System.Text.RegularExpressions;

namespace myHttpModule
{
   
/// <summary>
   
/// HttpModule类(URL重写)
   
/// </summary>
    public class HttpModule : System.Web.IHttpModule
    {
       
//public readonly static Mutex m=new Mutex();

       
/// <summary>
       
/// 实现接口的Init方法
       
/// </summary>
       
/// <param name="context"></param>
        public void Init(HttpApplication context)
        {
            context.BeginRequest
+= new EventHandler(ReUrl_BeginRequest);//这里
        }

       
public void Application_OnError(Object sender , EventArgs e)
        {

        }
       
/// <summary>
       
/// 实现接口的Dispose方法
       
/// </summary>
        public void Dispose()
        {
        }
       
/// <summary>
       
/// 重写Url
       
/// </summary>
       
/// <param name="sender">事件的源</param>
       
/// <param name="e">包含事件数据的 EventArgs</param>
        private void ReUrl_BeginRequest(object sender, EventArgs e)
        {

            HttpContext context = ((HttpApplication)sender).Context;
           
//string forumPath = "";
            string requestPath = context.Request.Path.ToLower();

           
//遍历每个url重写规则
           
//string strTemplateid = "";
            foreach (SiteUrls.URLRewrite url in SiteUrls.GetSiteUrls().Urls)
            {
               
if (Regex.IsMatch(requestPath, url.Pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase))
                {
                   
//实际地址
                   
//string newUrl = Regex.Replace(requestPath.Substring(context.Request.Path.LastIndexOf("/")), url.Pattern, url.QueryString, RegexOptions.Compiled | RegexOptions.IgnoreCase);
                    string newUrl = Regex.Replace(context.Request.Path, url.Pattern, url.QueryString, RegexOptions.Compiled | RegexOptions.IgnoreCase);

                   
//HttpContext.Current.Response.Write(context.Request.Path + "<br/>" + url.Pattern + "<br/>" + url.QueryString + "<br/>");
                   
//HttpContext.Current.Response.Write(url.Page + "<br/>" + newUrl);
                   
//HttpContext.Current.Response.End();
                    context.RewritePath("/" + url.Page, string.Empty, newUrl);

                   
return;
                }
            }

            context.RewritePath("/" + requestPath);
        }
    }
   
/// <summary>
   
/// 站点伪Url信息类
   
/// </summary>
    public class SiteUrls
    {
       
#region 内部属性和方法
       
private static object lockHelper = new object();
       
private static volatile SiteUrls instance = null;

       
string SiteUrlsFile = HttpContext.Current.Server.MapPath("~/xml/urls.config");
       
private System.Collections.ArrayList _Urls;
       
public System.Collections.ArrayList Urls
        {
           
get
            {
               
return _Urls;
            }
           
set
            {
                _Urls
= value;
            }
        }

       
private System.Collections.Specialized.NameValueCollection _Paths;
       
public System.Collections.Specialized.NameValueCollection Paths
        {
           
get
            {
               
return _Paths;
            }
           
set
            {
                _Paths
= value;
            }
        }

       
private SiteUrls()
        {
            Urls
= new System.Collections.ArrayList();
            Paths
= new System.Collections.Specialized.NameValueCollection();

            XmlDocument xml
= new XmlDocument();

            xml.Load(SiteUrlsFile);

            XmlNode root
= xml.SelectSingleNode("urls");
           
foreach(XmlNode n in root.ChildNodes)
            {
               
if (n.NodeType != XmlNodeType.Comment && n.Name.ToLower() == "rewrite")
                {
                    XmlAttribute name
= n.Attributes["name"];
                    XmlAttribute path
= n.Attributes["path"];
                    XmlAttribute page
= n.Attributes["page"];
                    XmlAttribute querystring
= n.Attributes["querystring"];
                    XmlAttribute pattern
= n.Attributes["pattern"];

                   
if (name != null && path != null && page != null && querystring != null && pattern != null)
                    {
                        Paths.Add(name.Value, path.Value);
                        Urls.Add(
new URLRewrite(name.Value, pattern.Value, page.Value.Replace("^", "&"), querystring.Value.Replace("^", "&")));
                    }
                }
            }
        }
       
#endregion

       
public static SiteUrls GetSiteUrls()
        {
           
if (instance == null)
            {
               
lock (lockHelper)
                {
                   
if (instance == null)
                    {
                        instance
= new SiteUrls();
                    }
                }
            }
           
return instance;

        }

       
public static void SetInstance(SiteUrls anInstance)
        {
           
if (anInstance != null)
                instance
= anInstance;
        }

       
public static void SetInstance()
        {
            SetInstance(
new SiteUrls());
        }


       
/// <summary>
       
/// 重写伪地址
       
/// </summary>
        public class URLRewrite
        {
           
#region 成员变量
           
private string _Name;
           
public string Name
            {
               
get
                {
                   
return _Name;
                }
               
set
                {
                    _Name
= value;
                }
            }

           
private string _Pattern;
           
public string Pattern
            {
               
get
                {
                   
return _Pattern;
                }
               
set
                {
                    _Pattern
= value;
                }
            }

           
private string _Page;
           
public string Page
            {
               
get
                {
                   
return _Page;
                }
               
set
                {
                    _Page
= value;
                }
            }

           
private string _QueryString;
           
public string QueryString
            {
               
get
                {
                   
return _QueryString;
                }
               
set
                {
                    _QueryString
= value;
                }
            }
           
#endregion

           
#region 构造函数
           
public URLRewrite(string name, string pattern, string page, string querystring)
            {
                _Name
= name;
                _Pattern
= pattern;
                _Page
= page;
                _QueryString
= querystring;
            }
           
#endregion
        }

    }
}

urls.config文件:

<?xml version="1.0" encoding="utf-8" ?>
<urls>
 
<rewrite name="rss"
       path
="/rss-{0}.aspx"
       pattern
= "/rss(-(/d+))?.aspx"
       page
="/rss.aspx"
       querystring
="ID=$2" />
</urls>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值