예제 #1
0
        internal static void Init(HttpContext cntx)
        {
            DataRow rConfig = GetConfig().Rows[0];

            if (rConfig["on"].ToString() == "0")
            {
                return;
            }
            LanguageInfo li = new LanguageInfo();
            string       by = "";

            switch (rConfig["by"].ToString())
            {
            case "domain":
                Uri url = cntx.Request.Url;
                by = (url.Host.StartsWith("www.") ? url.Host.Substring(4) : url.Host) + (url.Port == 80 ? "" : url.Port.ToString()) + Sota.Web.SimpleSite.Path.VRoot;
                break;

            case "path":
                by = cntx.Request.Url.ToString().Replace(Sota.Web.SimpleSite.Path.ARoot, "").Split('/')[0];
                break;

            default:
                by = cntx.Request.QueryString[rConfig["by"].ToString().Split('=')[1]];
                break;
            }
            li._by = by;
            DataRow[] rs = GetLanguages().Select("by='" + by + "'");
            if (rs.Length > 0)
            {
                li._id    = rs[0]["id"].ToString();
                li._name  = rs[0]["name"].ToString();
                li._sname = rs[0]["sname"].ToString();
                if (rs[0]["culture"].ToString() != "default")
                {
                    li._culture = CultureInfo.CreateSpecificCulture(rs[0]["culture"].ToString());
                    Thread.CurrentThread.CurrentCulture   = li._culture;
                    Thread.CurrentThread.CurrentUICulture = li._culture;
                }
            }
            cntx.Items[context_key] = li;
        }
예제 #2
0
        public void Application_BeginRequest(Object sender, EventArgs e)
        {
            //язык
            LanguageInfo.Init(Context);

            //определяем и сохраняем полный путь
            string fullpath = Request.Url.AbsoluteUri.ToLower();

            Path.InitFull(fullpath);
            //определяем домен и соответствующий язык
            //протокол
            string protocol = Util.GetProtocol(Request.IsSecureConnection);
            //полный путь без протокола
            string path = fullpath.Remove(0, protocol.Length).Split(Keys.UrlParamPageDelimiter[0])[0];

            //кусок пути, который добавляется к пути страницы в зависимости от домена
            string addPath = string.Empty;

            string site         = string.Empty;
            string domain       = path.Split('/')[0] + Request.ApplicationPath.TrimEnd('/');
            int    domainLength = domain.Length;

            //флаг отключения сайта
            if (Config.Main.Off)
            {
                string curPage = "~/" + path.Remove(0, domainLength + 1);
                if (!curPage.StartsWith("~/admin") && curPage != Config.Main.RedirectAll)
                {
                    Response.Redirect(Config.Main.RedirectAll);
                }
            }


            if (domain.StartsWith("www."))
            {
                domain = domain.Substring(4);
            }

            DataRow[] rs = Config.GetDomains().Select("'" + domain.Replace("'", "''") + "' LIKE name");
            if (rs.Length > 0)
            {
                addPath = rs[0]["addpath"].ToString();
                site    = rs[0]["site"].ToString();
            }

            Path.InitDomain(domain);
            Path.InitSite(site);
            Path.InitAddPath(addPath);


            //если расширение не .aspx и не то, что указано в настройках, то выходим
            //расширение
            string ext = Config.Main.Extension;

            if (path.EndsWith(".aspx"))
            {
                ext = ".aspx";
            }
            else if (!path.EndsWith(ext))
            {
                return;
            }


            //определяем страницу
            //путь страницы без домена, расширения и строки запроса
            string pathWithoutDomain = path.Remove(0, domainLength + 1);
            string page = pathWithoutDomain.Length == 0 ? "default" : pathWithoutDomain.Remove(pathWithoutDomain.Length - ext.Length, ext.Length);

            //проверяем необходимость перезаписи
            if (Config.GetNoRewrite().Select("'" + page.Replace("'", "''") + "' LIKE path").Length > 0)
            {
                return;
            }
            page = addPath + page;
            //загружаем страницу
            PageInfo pi = PageInfo.Init(page);

            //если страница не загрузилась или удалена выходим
            if (pi == null || pi.Deleted)
            {
                return;
            }
            //проверяем правильный ли протокол
            //протокол, который соответствует данной странице
            if (pi.Protocol != protocol)
            {
                Response.Redirect(pi.Protocol + path);
            }
            //делаем перезапись
            //шаблон страницы
            if (pi.Template.Length > 0)
            {
                Path.InitPage(page);
                Context.RewritePath(Keys.ServerRoot + Keys.UrlPathDelimiter + pi.Template);
            }
        }