Exemple #1
0
 public int AddRedirect(int?sortOrder, string host, string fromUrl, bool?wildcard, string toUrl, int?toContentId, string toContentLang)
 {
     if (string.IsNullOrEmpty(toUrl) && toContentId.GetValueOrDefault(0) <= 0)
     {
         return(0);
     }
     if (string.IsNullOrEmpty(toContentLang))
     {
         toContentLang = null;
     }
     if (string.IsNullOrEmpty(fromUrl))
     {
         fromUrl = "/";
     }
     if (!fromUrl.StartsWith("/"))
     {
         fromUrl = "/" + fromUrl;
     }
     using (var context = ServiceLocator.Current.GetInstance <RedirectDbContext>())
     {
         var r = new RedirectRule()
         {
             SortOrder     = sortOrder.GetValueOrDefault(0),
             Host          = host,
             FromUrl       = fromUrl,
             Wildcard      = wildcard.GetValueOrDefault(false),
             ToUrl         = toUrl,
             ToContentId   = toContentId.GetValueOrDefault(0),
             ToContentLang = toContentLang,
         };
         context.RedirectRules.Add(r);
         return(context.SaveChanges());
     }
 }
Exemple #2
0
        public int RemoveAllDuplicateRules()
        {
            int counter = 0;

            using (var context = ServiceLocator.Current.GetInstance <RedirectDbContext>())
            {
                var          rules       = context.Database.SqlQuery <RedirectRule>(@"select *
	                                            from ["     + RedirectRuleStorage.RedirectTableName + @"]
	                                            where ([FromUrl] IN
                                            (
                                              SELECT [FromUrl]
                                              FROM [SEO_Redirect] 
                                            GROUP BY
                                                  [SortOrder]
                                                  ,[Host]
                                                  ,[FromUrl]
                                                  ,[ToUrl]
                                                  ,[ToContentId]
                                                  ,[ToContentLang]
	                                              ,[Wildcard]
                                            HAVING 
                                                COUNT(*) > 1
	                                            )
	                                            )
	                                            order by [FromUrl]"    ).ToList();
                RedirectRule workingRule = null;

                foreach (var rule in rules)
                {
                    if (workingRule != null && workingRule.FromUrl == rule.FromUrl)
                    {
                        DeleteRedirect(rule.Id);
                        counter++;
                    }
                    else if (workingRule == null)
                    {
                        workingRule = rule;
                    }
                    else if (workingRule.FromUrl != rule.FromUrl)
                    {
                        workingRule = rule;
                    }
                }
            }
            return(counter);
        }
Exemple #3
0
        public string GetPrimaryRedirectUrlOrDefault(string host, string relativeUrl)
        {
            if (!RedirectRuleStorage.IsUpToDate)
            {
                return(null);
            }
            if (string.IsNullOrEmpty(relativeUrl))
            {
                return(null);
            }
            if (relativeUrl.Length > 1 && relativeUrl.Last() == '/')
            {
                relativeUrl = relativeUrl.Remove(relativeUrl.Length - 1);
            }
            relativeUrl = HttpUtility.UrlDecode(relativeUrl.ToLower());
            using (var context = ServiceLocator.Current.GetInstance <RedirectDbContext>())
            {
                var exactMatch = context.RedirectRules
                                 .Where(x => x.Host == null || x.Host == "*" || x.Host.Equals(host, StringComparison.InvariantCultureIgnoreCase))
                                 .Where(x => x.FromUrl.Equals(relativeUrl, StringComparison.InvariantCultureIgnoreCase))
                                 .OrderBy(x => x.SortOrder)
                                 .ThenBy(x => x.FromUrl)
                                 .FirstOrDefault();

                var wildcards = context.RedirectRules
                                .Where(x => x.Host == null || x.Host == "*" || x.Host.Equals(host, StringComparison.InvariantCultureIgnoreCase))
                                .Where(x => x.Wildcard)
                                .OrderBy(x => x.SortOrder)
                                .ThenBy(x => x.FromUrl);
                var match = wildcards.FirstOrDefault(x => relativeUrl.StartsWith(x.FromUrl) ||
                                                     relativeUrl.Equals(x.FromUrl, StringComparison.InvariantCultureIgnoreCase));

                RedirectRule theMatch = (exactMatch != null && match != null)
                                    ? exactMatch.SortOrder <= match.SortOrder ? exactMatch : match
                                    : exactMatch ?? match;
                if (theMatch == null)
                {
                    return(null);
                }

                return(theMatch.ToContentId > 0
                        ? _urlResolver.GetUrl(new ContentReference(theMatch.ToContentId), theMatch.ToContentLang)
                        : theMatch.ToUrl);
            }
        }
 public int AddRedirect(int? sortOrder, string fromUrl, bool? wildcard, string toUrl, int? toContentId, string toContentLang)
 {
     if (string.IsNullOrEmpty(toUrl) && toContentId.GetValueOrDefault(0) <= 0)
         return 0;
     if (string.IsNullOrEmpty(toContentLang))
         toContentLang = null;
     if (string.IsNullOrEmpty(fromUrl))
         fromUrl = "/";
     if (!fromUrl.StartsWith("/"))
         fromUrl = "/" + fromUrl;
     using (var context = ServiceLocator.Current.GetInstance<RedirectDbContext>())
     {
         var r = new RedirectRule()
         {
             SortOrder = sortOrder.GetValueOrDefault(0),
             FromUrl = fromUrl,
             Wildcard = wildcard.GetValueOrDefault(false),
             ToUrl = toUrl,
             ToContentId = toContentId.GetValueOrDefault(0),
             ToContentLang = toContentLang,
         };
         context.RedirectRules.Add(r);
         return context.SaveChanges();
     }
 }