随笔 - 290  文章 - 10  评论 - 85  2

网上一般都是写HttpModule,但这个写法在IIS7就Out了.

IIS7 的管道模式直接在web.config就可以配置了.

Web.config
<configuration>
    
<!-- these for IIS7 url rewrite-->
    
<system.webServer>
        
<rewrite>
            
<rules>
                
<rule name="Rewrite to Items.aspx">
                    
<match url="^article/([0-9]+).html$" />
                    
<action type="Rewrite" url="article.aspx?newid={R:1}" />
                
</rule>
            
</rules>
        
</rewrite>
    
</system.webServer>
</configuration>


或者用另一种简单的方法,就是Global.asax里面写

代码
    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        Context.RewritePath(UrlRewrite(Request.RawUrl));
    }
    
//Reg Expression to Decode SEO url to xxx.aspx?a=1&b=2 format for Context.RewritePath
    public static string UrlRewrite(string SEOUrl)
    {
        
string VPath = Request.ApplicationPath + "/";

        Regex regProd 
= new Regex(VPath+"Products_(\\w+)_(\\d).aspx", RegexOptions.IgnoreCase);
        
if (regProd.IsMatch(SEOUrl))
        {
            Match M 
= regProd.Match(SEOUrl);
            
string CategoryId = M.Groups[1].Value; //"BUGS";
            string PageIndex = M.Groups[2].Value;//"0";
            return string.Format(VPath + "Products.aspx?page={0}&categoryId={1}", PageIndex, CategoryId);
        }

        Regex regItem 
= new Regex(VPath + "Items_(\\w+)_([a-zA-Z0-9_-]+).aspx", RegexOptions.IgnoreCase);
        
if (regItem.IsMatch(SEOUrl))
        {
            Match M 
= regItem.Match(SEOUrl);
            
string CategoryId = M.Groups[1].Value; //"BYARD";
            string productId = M.Groups[2].Value;//"BY-01";

            
return string.Format(VPath + "Items.aspx?productId={0}&categoryId={1}", productId, CategoryId);
        }

        
return SEOUrl;
    }


 

posted on 2011-02-23 16:19  Gu  阅读(...)  评论(...编辑  收藏