404.aspx.cs

来自「如果不使用IIS,请先运行 XSP.exe,待提示已侦听 8080端口后」· CS 代码 · 共 147 行

CS
147
字号
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text.RegularExpressions;
using DNNLite.Entites.Tab;

public partial class CommPages_404 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        
        
        //Response.Clear();
        //Response.StatusCode  = 404;
        //Response.End();
        //Response.Write(Request.Url  );
        //Response.End();
        if (DNNLite.Comm.Comm.PortalInfo.StaticMode != 2)
        {
            OutPut404();
        }


        if (Request.RequestType != "GET")
        {
            OutPut404();
        }

        if (Request.QueryString.Count == 0)
        {
            OutPut404();
        }

        string requrl = Request.QueryString[0]; 

        string[] patterns = 
        {
            "(?<url>^" + ResolveUrl("~/HTML/pages/")+".+/index\\.html$)",
            "^404;http[s]?://" + Request.Url.Host +"(?<url>"+ ResolveUrl("~/HTML/pages/")+".+/index\\.html$)",
            "^404;http[s]?://" + Request.Url.Host +":80(?<url>"+ ResolveUrl("~/HTML/pages/")+".+/index\\.html$)",
            "^(?<url>"+ResolveUrl("~/")+"index\\.html$)",
            "^404;http[s]?://" + Request.Url.Host +"(?<url>"+ ResolveUrl("~/")+"index\\.html$)",
            "^404;http[s]?://" + Request.Url.Host +":80(?<url>"+ ResolveUrl("~/")+"index\\.html$)",

            "(?<url>^" + ResolveUrl("~/HTML/pages/")+".+/index-.+?-.+?\\.html$)",
            "^404;http[s]?://" + Request.Url.Host +"(?<url>"+ ResolveUrl("~/HTML/pages/")+".+/index-.+?-.+?\\.html$)",
            "^404;http[s]?://" + Request.Url.Host +":80(?<url>"+ ResolveUrl("~/HTML/pages/")+".+/index-.+?-.+?\\.html$)",
            "^(?<url>"+ResolveUrl("~/")+"index-.+?-.+?\\.html$)",
            "^404;http[s]?://" + Request.Url.Host +"(?<url>"+ ResolveUrl("~/")+"index-.+?-.+?\\.html$)",
            "^404;http[s]?://" + Request.Url.Host +":80(?<url>"+ ResolveUrl("~/")+"index-.+?-.+?\\.html$)"
                            };

        foreach (string  p in patterns )
        {
            Regex r = new Regex(p, RegexOptions.IgnoreCase);
            Match m = r.Match(requrl);

            if (m.Length > 0)
            {
                //Response.Write("ceate");
                //Response.End();

                HttpContext.Current.Items.Add("createstaticfile",Server.MapPath(m.Groups["url"].Value ));
                DNNLite.Url.Use404StaticUrl.IsCreateStaticUrlAnyWay = true;
                try
                {
                    Server.Execute(StaticToQry(m.Groups["url"].Value));
                }
                catch (Exception)
                {
                    OutPut404();
                }
                
                Response.Clear();
                Response.Cache.SetCacheability(HttpCacheability.NoCache);
                Response.Redirect(m.Groups["url"].Value);
                return;
            }


        }

        OutPut404();

    }

    private static Regex farg = 
        new Regex("/index-(?<key>.+?)-(?<value>.+?)\\.html$", RegexOptions.IgnoreCase);

    private string StaticToQry(string url)
    {
        string u = url.Replace(ResolveUrl("~/"), "/");
        string filearg = string.Empty;

        if (farg.IsMatch(url))
        {
            Match m = farg.Match(url);
            filearg = m.Groups["key"] + "=" + m.Groups["value"];
        }
        
        string[] pa = u.Split('/');
        if (pa.Length == 2)
        {
            return "~/default.aspx" + (filearg.Length==0?string.Empty:"?"+filearg ) ;
        }
        else
        {
            string tabname = pa[3];
            TabInfo tab = DNNLite.Service.SystemLoadController.GetTabInfoByName(tabname);

            string qry = "";
            for (int i = 4; i < pa.Length-1; i++)
            {
                if (pa[i].IndexOf("-") > 0)
                {
                    string key = pa[i].Substring(0, pa[i].IndexOf("-"));
                    qry = qry  +"&"+ key  + "=" + pa[i].Substring(pa[i].IndexOf("-") + 1) ;

                }
                else
                {
                    string key = pa[i];
                    qry ="&"+ qry + key;

                }
            }

            return "~/default.aspx?tabid=" + tab.TabId + qry + (filearg.Length == 0 ? string.Empty : "&" + filearg);

        }

    }


    private void OutPut404()
    {
        Response.Clear();
        Response.StatusCode = 404;
        Response.Write("<h1>文件不存在</h1>");
        Response.End();
    }


}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?