public static RewriteRules GetCurrentRewriteRules()
        {
            string cacheName = "CommonConfiguration_RewriteRules";

            if (null != HttpContext.Current.Cache[cacheName])
            {
                try {
                    return((RewriteRules)HttpContext.Current.Cache[cacheName]);
                }
                catch {
                    return(new RewriteRules());
                }
            }
            else
            {
                try {
                    string      configFilePath = HttpContext.Current.Server.MapPath("/Config/RewriteRules.config"); //@"D:\Running projects\VC Corporation\Dantri\Dantri.Cached\CacheSettings.config";
                    XmlDocument xmlDoc         = new XmlDocument();
                    xmlDoc.Load(configFilePath);

                    RewriteRules rules = new RewriteRules();

                    XmlNodeList nlstRules = xmlDoc.DocumentElement.SelectNodes("//rules/rule");

                    for (int i = 0; i < nlstRules.Count; i++)
                    {
                        RewriteRule rule = new RewriteRule();
                        rule.Url     = nlstRules[i].SelectSingleNode("url").InnerText;
                        rule.Rewrite = nlstRules[i].SelectSingleNode("rewrite").InnerText;

                        rules.List.Add(rule);
                    }

                    XmlNode nodeFileSettingCacheExpire = xmlDoc.DocumentElement.SelectSingleNode("//Configuration/RewriteRulesFile");
                    //long fileSettingCacheExpire = Lib.Object2Long(nodeFileSettingCacheExpire.Attributes["cacheExpire"].Value);
                    //if (fileSettingCacheExpire <= 0) {
                    long fileSettingCacheExpire = 3600;// default 1h
                    //}

                    CacheDependency fileDependency = new CacheDependency(configFilePath);
                    HttpContext.Current.Cache.Insert(cacheName, rules, fileDependency, DateTime.Now.AddSeconds(fileSettingCacheExpire), TimeSpan.Zero, CacheItemPriority.Normal, null);

                    return(rules);
                }
                catch {
                    return(new RewriteRules());
                }
            }
        }
        public IHttpHandler GetHandler(HttpContext context, string requestType, string url1, string pathTranslated)
        {
            if (HttpContext.Current.Request.Url.Query != String.Empty)
            {
                if (context.Request.Url.Query.Length > 0)
                {
                    context.Items["VirtualUrl"] = context.Request.Path + context.Request.Url.Query;
                }
            }
            if (context.Items["VirtualUrl"] == null)
            {
                context.Items["VirtualUrl"] = context.Request.Path;
            }

            string url = context.Request.Url.AbsolutePath;

            while (url.EndsWith("/") && !string.IsNullOrEmpty(url))
            {
                url = url.Substring(0, url.Length - 1);
            }

            if (url == "/blank.aspx")
            {
                url = context.Request.Url.Query.ToLower();
                url = url.Replace("/:80", "");
                string host = "?404;" + ConfigurationManager.AppSettings["SITE_URL"].ToLower();
                url = url.Substring(url.IndexOf(host) + host.Length);
                if (!url.StartsWith("/"))
                {
                    url = "/" + url;
                }
            }

            string rewrite = "";

            RewriteRules rewriteRules = RewriteRules.GetCurrentRewriteRules();

            rewrite = rewriteRules.GetMatchingRewrite(url);

            if (!string.IsNullOrEmpty(rewrite))
            {
                if (context.Request.Url.AbsolutePath == "/blank.aspx")
                {
                    rewrite = rewrite.Replace("/:80", "");
                }
                context.RewritePath("~" + rewrite + (context.Request.Url.Query.Length > 0 ? "?" + HttpContext.Current.Request.Url.Query.Replace("?", "") : ""));
            }
            else
            {
                if (context.Request.Url.AbsolutePath == "/blank.aspx")
                {
                    rewrite = "/error.aspx?status=404";
                }
                else
                {
                    rewrite = context.Request.Path + context.Request.Url.Query;
                }
            }

            string newFilePath = rewrite.IndexOf("?") > 0 ? rewrite.Substring(0, rewrite.IndexOf("?")) : rewrite;

            return(PageParser.GetCompiledPageInstance(newFilePath, context.Server.MapPath(newFilePath), context));
        }