public override string FriendlyUrl(TabInfo tab, string path, string pageName, string portalAlias) { var currentStore = HccRequestContext.Current.CurrentStore; if (currentStore != null) { if (tab != null) { var urlConfig = new UrlConfigSettings(); var locales = Factory.Instance.CreateStoreSettingsProvider().GetLocales(); foreach (var local in locales) { var context = new HccRequestContext(local.Code); var accountServices = Factory.CreateService <AccountService>(context); var store = accountServices.Stores.FindByIdWithCache(currentStore.Id); urlConfig = store.Settings.Urls.UrlConfigs .FirstOrDefault(uc => uc.TabId == tab.TabID); if (urlConfig != null) { break; } } if (urlConfig != null && !string.IsNullOrEmpty(urlConfig.CustomUrl)) { var queryStringDic = GetQueryStringDictionary(path); var friendlyPath = GetFriendlyAlias(path, portalAlias, true); return(GetFriendlyQueryString(tab, friendlyPath, pageName, urlConfig)); } } } return(base.FriendlyUrl(tab, path, pageName, portalAlias)); }
private string GetFriendlyQueryString(TabInfo tab, string path, string pageName, UrlConfigSettings urlConfig) { var friendlyPath = path; var queryStringMatch = Regex.Match(friendlyPath, "(.[^\\\\?]*)\\\\?(.*)", RegexOptions.IgnoreCase); var queryStringSpecialChars = ""; if (!ReferenceEquals(queryStringMatch, Match.Empty)) { friendlyPath = queryStringMatch.Groups[1].Value; var queryStringDic = GetQueryStringDictionary(path); var customUrl = string.Empty; if (urlConfig != null) { customUrl = urlConfig.CustomUrl; } var replacePath = string.Empty; if (!string.IsNullOrEmpty(customUrl)) { replacePath = customUrl.TrimStart('/'); } if (queryStringDic.ContainsKey("slug")) { replacePath = replacePath + "/" + HttpContext.Current.Server.UrlDecode(queryStringDic["slug"]); } friendlyPath = Regex.Replace(friendlyPath, Globals.glbDefaultPage, replacePath, RegexOptions.IgnoreCase); var queryString = queryStringMatch.Groups[2].Value.Replace("&", "&"); if (queryString.StartsWith("?")) { queryString = queryString.TrimStart(Convert.ToChar("?")); } var nameValuePairs = queryString.Split(Convert.ToChar("&")); for (var i = 0; i <= nameValuePairs.Length - 1; i++) { var pair = nameValuePairs[i].Split(Convert.ToChar("=")); if (pair[0] == "slug" || pair[0] == "tabid") { continue; } //Rewrite into URL, contains only alphanumeric and the % or space if (string.IsNullOrEmpty(queryStringSpecialChars)) { queryStringSpecialChars = pair[0] + "=" + pair[1]; } else { queryStringSpecialChars = queryStringSpecialChars + "&" + pair[0] + "=" + HttpContext.Current.Server.UrlDecode(pair[1]); } } } if (!string.IsNullOrEmpty(queryStringSpecialChars)) { return(friendlyPath + "?" + queryStringSpecialChars); } return(friendlyPath); }