private Uri ValidateRedirectToSiteUrl(HostnameRedirectsSettings settings, Uri uri) { if (settings.Redirect != HostnameRedirectModes.Domain || string.IsNullOrWhiteSpace(settings.RedirectToSiteUrl)) { return(uri); } Uri requestedUri; try { requestedUri = new Uri(settings.RedirectToSiteUrl); } catch (Exception e) { Logger.Error(string.Format("{0}, Error parsing RedirectToSiteURL, skipping redirect", e)); return(uri); } if (requestedUri.Host == null || requestedUri.Host.Equals(uri.Host, StringComparison.OrdinalIgnoreCase)) { return(uri); } var builder = new UriBuilder(uri); builder.Host = requestedUri.Host; return(builder.Uri); }
private bool CheckIfIgnored(HostnameRedirectsSettings settings, string url) { if (string.IsNullOrWhiteSpace(settings.IgnoredUrls)) { return(false); } return(settings.IgnoredUrls.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).Any(x => url.StartsWith(x))); }
private Uri ValidateSSL(HostnameRedirectsSettings settings, Uri url) { if (!settings.ForceSSL) { return(url); } if (url.ToString().StartsWith("http://", StringComparison.OrdinalIgnoreCase)) { return(new Uri(url.ToString().Replace("http://", "https://"))); } return(url); }
private Uri ValidateNonWWW(HostnameRedirectsSettings settings, Uri url) { if (settings.Redirect != HostnameRedirectModes.WWW) { return(url); } if (!url.Authority.StartsWith("www.", StringComparison.OrdinalIgnoreCase)) { return(new Uri(url.ToString().Replace(string.Format("{0}://", url.Scheme), string.Format("{0}://www.", url.Scheme)))); } return(url); }
private Uri ValidateWWW(HostnameRedirectsSettings settings, Uri url) { if (settings.Redirect != HostnameRedirectModes.NonWWW) { return(url); } if (url.Authority.StartsWith("www.", StringComparison.OrdinalIgnoreCase)) { return(new Uri(url.ToString().Replace("www.", ""))); } return(url); }
private Uri ValidateTrailingSlashes(HostnameRedirectsSettings settings, Uri uri) { if (settings.TrailingSlashes == TrailingSlashesModes.None) { return(uri); } var lastSegment = uri.Segments.Last(); // ignore as request is for homepage. if (lastSegment == "/" || IsStaticFile(lastSegment)) { return(uri); } var endsWith = lastSegment.EndsWith("/"); if ((endsWith && settings.TrailingSlashes == TrailingSlashesModes.Append) || (!endsWith && settings.TrailingSlashes == TrailingSlashesModes.Remove)) { return(uri); } var builder = new UriBuilder(uri); if (settings.TrailingSlashes == TrailingSlashesModes.Append) { builder.Path += "/"; } if (settings.TrailingSlashes == TrailingSlashesModes.Remove) { builder.Path = builder.Path.Substring(0, builder.Path.Length - 1); } return(builder.Uri); }