This is a script that can help you migrate your redirects from 301 Url Tracker to Skybrud.Umbraco.Redirects.
The script is dependent on two pull requests I made (enabling regex'es and forwarding of query strings).
| namespace EIIP.Portal.Web.Controllers | |
| { | |
| using System; | |
| using System.Web.Http; | |
| using InfoCaster.Umbraco.UrlTracker.Models; | |
| using Skybrud.Umbraco.Redirects.Models; | |
| using Umbraco.Web.WebApi; | |
| public class MigrateRedirectsController : UmbracoApiController | |
| { | |
| [HttpGet] | |
| public void Migrate(string authKey) | |
| { | |
| if (authKey != "F8AF93CD-1A33-48D9-B443-016984D2761C") | |
| { | |
| return; | |
| } | |
| var urlTrackerEntries = ApplicationContext.DatabaseContext.Database.Fetch<UrlTrackerModel>("SELECT * FROM icUrlTracker"); | |
| foreach (var entry in urlTrackerEntries) | |
| { | |
| var row = new RedirectItemRow(); | |
| row.Created = entry.Inserted.Ticks; | |
| row.ForwardQueryString = entry.RedirectPassThroughQueryString; | |
| row.IsPermanent = entry.RedirectHttpCode == 301 || entry.RedirectHttpCode == 401; | |
| if (entry.RedirectNodeId != null) | |
| { | |
| var redirectNode = this.Umbraco.TypedContent(entry.RedirectNodeId); | |
| if (redirectNode != null) | |
| { | |
| row.LinkId = redirectNode.Id; | |
| row.LinkName = redirectNode.Name; | |
| row.LinkUrl = redirectNode.Url; | |
| } | |
| else | |
| { | |
| row.LinkId = (int)entry.RedirectNodeId; | |
| row.LinkName = entry.Notes ?? entry.RedirectUrl; | |
| row.LinkUrl = entry.RedirectUrl; | |
| } | |
| } | |
| else | |
| { | |
| row.LinkName = entry.Notes ?? entry.RedirectUrl; | |
| row.LinkUrl = entry.RedirectUrl; | |
| } | |
| var linkmode = entry.RedirectNodeId != null ? RedirectLinkMode.Content : RedirectLinkMode.Url; | |
| row.QueryString = entry.OldUrlQueryString; | |
| row.RootNodeId = Math.Max(0, entry.RedirectRootNodeId); | |
| row.Updated = DateTime.Now.Ticks; | |
| row.IsRegex = !string.IsNullOrEmpty(entry.OldRegex); | |
| row.Url = entry.OldRegex ?? (entry.OldUrl.StartsWith("/") ? string.Empty : "/") + entry.OldUrl; | |
| try | |
| { | |
| RedirectsRepository.Current.AddRedirect( | |
| row.RootNodeId, | |
| row.Url, | |
| new RedirectLinkItem(row.LinkId, row.LinkName, row.LinkUrl, linkmode), | |
| row.IsPermanent, | |
| row.IsRegex, | |
| row.ForwardQueryString); | |
| } | |
| catch (Exception e) | |
| { | |
| // just catch it, in case there a duplicate entries in UrlTracker. | |
| } | |
| } | |
| } | |
| } | |
| } |