public virtual IRewriteCacheItem GetRewriteRule(HttpRequest request)
        {
            string curpath = request.Path;

            IRewriteCacheItem cached = GetCachedRewriteRuleMatch(curpath);

            if (cached == null)
            {
                cached = CreateRewriteRuleFromRequest(request);
                if (cached != null)
                {
                    CacheRewriteRuleMatch(curpath, cached);
                }
            }

            return(cached);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="request"></param>
        /// <remarks>This method might not return if it successfully rewrites the request</remarks>
        public virtual void TryToRewriteRequest(HttpRequest request)
        {
            IRewriteCacheItem item = GetRewriteRule(request);

            if (item != null)
            {
                switch (item.Type)
                {
                case RewriteType.Redirect:
                    Response.Redirect(item.Path, true);
                    break;

                case RewriteType.Rewrite:
                    Server.Transfer(item.Path, true);
                    break;

                case RewriteType.Resource:
                    throw new Exception("Not yet implemented");
                    //break;
                }
            }
        }
 public virtual void CacheRewriteRuleMatch(string match, IRewriteCacheItem rci)
 {
     _rewriteUrls[match] = rci;
 }