URL重写

 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
    
{
        
内部属性和方法

        
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
        
{
            
成员变量 

            
构造函数
        }


    }

}

 


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、付费专栏及课程。

余额充值