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)); }