• URL Rewrite


    using System;
    using System.IO;
    using System.Threading;
    using System.Web;
    
    using Com.Website.Configuration;
    using Com.Website.WebModel.Resource;
    using Com.Website.DomainModel;
    
    namespace Com.Website.HttpModule.UrlRewriter
    {
        /// <summary>
        /// Url rewrite http module
        /// </summary>
        public class UrlRewriteHttpModule : IHttpModule
        {
            private UrlHelper urlHelper;
            private RewriteRuleCollection rewriteRuleList = new RewriteRuleCollection();
    
            public UrlRewriteHttpModule()
            {
                this.urlHelper = new UrlHelper();
            }
    
            #region IHttpModule Members
    
            public void Init(HttpApplication context)
            {
                context.BeginRequest += new EventHandler(OnBeginRequest);
            }
    
            public void Dispose()
            {
    
            }
    
            #endregion
    
            private void InitialSetting()
            {
                rewriteRuleList.Clear();
                foreach (RewriteSetting rewriteSetting in ConfigurationManager.UrlRewriterConfiguration.RewriteConfiguration.RewriteSettingCollection)
                {
                    RewriteRule rewrite = null;
                    string providerName = rewriteSetting.Provider;
                    if (string.IsNullOrEmpty(providerName))
                    {
                        rewrite = UrlRewrite.CreateRewriteRule();
                    }
                    else
                    {
                        rewrite = UrlRewrite.CreateRewriteRule(providerName);
                    }
                    rewrite.Initialize(rewriteSetting);
                    rewriteRuleList.Add(rewrite);
                }
            }
    
            private void OnBeginRequest(object sender, EventArgs e)
            {
                HttpApplication application = sender as HttpApplication;
    
                if (File.Exists(application.Request.PhysicalPath)) return;
    
                if (!(ConfigurationManager.BizConfiguration != null 
                        && ConfigurationManager.UrlRewriterConfiguration != null
                        && ConfigurationManager.UrlRewriterConfiguration.RewriteConfiguration != null
                        && ConfigurationManager.UrlRewriterConfiguration.RewriteConfiguration.RewriteSettingCollection != null))
                    return;
    
                string pageName = string.Empty;
                if (HttpContext.Current != null && 
                    HttpContext.Current.Request != null &&
                    HttpContext.Current.Request.Url != null)
                {
                    pageName = HttpContext.Current.Request.Url.AbsolutePath;
                }
                PageUrlAlias currentAlias = PageUrlAlias.InvalidUrl;
                if (!string.IsNullOrWhiteSpace(pageName))
                {
                    currentAlias = ConfigurationManager.WebPageConfiguration.GetPageUrlAlias(pageName);
                }
    
                if (ConfigurationManager.UrlRewriterConfiguration.ExceptPage != null
                    && ConfigurationManager.UrlRewriterConfiguration.ExceptPage.Pages != null
                    && ConfigurationManager.UrlRewriterConfiguration.ExceptPage.Pages.Exists(d => d == currentAlias))
                {
                    return;
                }
    
                InitialSetting();
                string requestUrl = application.Request.RawUrl;
                string requestQuerystring = string.Empty;
                string virtualUrl = requestUrl;
                int pos = requestUrl.IndexOf('?');
                if (pos >= 0)
                {
                    requestQuerystring = requestUrl.Substring(pos + 1);
                    virtualUrl = requestUrl.Substring(0, pos);
                }
                virtualUrl = virtualUrl.TrimEnd('/');
    
                RewriteRule rewriteRule = rewriteRuleList.Find(new Predicate<RewriteRule>(delegate(RewriteRule rule) { return rule.IsRewrite(virtualUrl); }));
                if (rewriteRule == null) return;
    
                string destinationUrl = rewriteRule.RewriteUrl(virtualUrl);
                destinationUrl = urlHelper.JoinUrlParameter(urlHelper.HandleRootOperator(destinationUrl), requestQuerystring);
    
                HttpContext.Current.RewritePath(destinationUrl);
            }
        }
    }
  • 相关阅读:
    地平线4快速选车-适用入门玩家
    网站大全【杂】
    排序算法-C语言
    一个仿tp5分页组件的实现
    thinkphp 二级域名绑定模块,导致设置的路由被多域名共用的问题解决方案
    php核心技术与最佳实践 --- 错误与异常
    php核心技术与最佳实践 --- 错误与异常
    php核心技术与最佳实践--- oop
    《CSS揭秘》》
    css 单位之px , em , rem
  • 原文地址:https://www.cnblogs.com/fang-beny/p/3567541.html
Copyright © 2020-2023  润新知