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 + -
显示快捷键?