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; }
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); } }