public override void Process(HttpRequestArgs args)
        {
            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();
            if (Redirector.Provider == null)
            {
                return;
            }
            if (Context.Site == null || Context.Database == null)
            {
                return;
            }
            if (Config.IgnoredSites.Contains(Context.Site.Name, StringComparer.OrdinalIgnoreCase))
            {
                return;
            }
            if (Redirector.IsIgnoredPageMode())
            {
                return;
            }
            if (Context.Item != null)
            {
                return;
            }
            IRedirect redirect = Redirector.Provider.LookupUrl(args.Context.Request.Path);

            if (redirect == null)
            {
                return;
            }
            if (!redirect.Enabled)
            {
                return;
            }
            if (Config.SiteContextChecking && redirect.Sites != null && !redirect.Sites.Contains(Context.Site.Name, StringComparer.OrdinalIgnoreCase))
            {
                return;
            }
            string targetUrl           = redirect.GetTargetUrl(Context.Site.Name);
            string redirectQueryString = redirect.QueryString;

            if (!string.IsNullOrEmpty(targetUrl))
            {
                if (Config.LogProcessorStopwatch)
                {
                    stopwatch.Stop();
                    Log.Info(string.Format("Redirect Manager: httprequest processor total time is : {0}ms ({1} ticks)", ((double)stopwatch.ElapsedTicks / (double)Stopwatch.Frequency * 1000.0).ToString("F"), stopwatch.ElapsedTicks), this);
                }

                if (string.IsNullOrEmpty(redirectQueryString))
                {
                    Redirector.Respond(args, redirect.ResponseStatusCode, redirect.ResponseStatusDescription, targetUrl);
                }
                else
                {
                    Redirector.Respond(args, redirect.ResponseStatusCode, redirect.ResponseStatusDescription, targetUrl, redirectQueryString);
                }
            }
        }