using System; using System.Data; using System.Web; using BlogEngine.Core.Web.Controls; using BlogEngine.Core.Web.Extensions; [Extension("SEO Redirection Urls", "1.0", "SpiceLogic Inc.")] public class SeoRedirection { static protected ExtensionSettings _settings; public SeoRedirection() { ExtensionSettings settings = new ExtensionSettings("SeoRedirection"); settings.AddParameter("OldUrl", "Old Url", 255, true, true, ParameterType.String); settings.AddParameter("NewUrl", "New Url", 255, true, false, ParameterType.String); // describe specific rules for entering parameters settings.Help = "Redirects an Old Url to New Url with Http Status Code 301"; //------------------------------------------------------ ExtensionManager.ImportSettings(settings); _settings = ExtensionManager.GetSettings("SeoRedirection"); } } public class SeoRedirector : IHttpModule { public void Dispose() { } public void Init(HttpApplication context) { context.BeginRequest += context_BeginRequest; } private static void context_BeginRequest(object sender, EventArgs e) { HttpContext context = ((HttpApplication)sender).Context; ExtensionSettings seoRedirectorSettings = ExtensionManager.GetSettings("SeoRedirection"); if(seoRedirectorSettings != null) { DataTable table = seoRedirectorSettings.GetDataTable(); string newUrl = null; foreach(DataRow row in table.Rows) { if(row["OldUrl"].ToString().Equals(context.Request.Url.AbsoluteUri, StringComparison.OrdinalIgnoreCase)) { newUrl = row["NewUrl"].ToString(); break; } } if(newUrl != null) { context.Response.StatusCode = 301; context.Response.Status = "301 Moved Permanently"; context.Response.AddHeader("Location", newUrl); } } } }