예제 #1
0
        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);
        }
예제 #2
0
        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)));
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
        }
예제 #5
0
        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);
        }
예제 #6
0
        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);
        }