62,268
社区成员
发帖
与我相关
我的任务
分享
public class UrlRewriter : IHttpHandler //实现“IHttpHandler”接口
{
/// <summary>
/// 构造函数
/// </summary>
public UrlRewriter()
{
}
/// <summary>
/// 解析URL
/// </summary>
/// <param name="Context"></param>
public void ProcessRequest(HttpContext Context)
{
//取得原始URL屏蔽掉参数
string Url = Context.Request.RawUrl;
System.Xml.XmlDocument Dom = new System.Xml.XmlDocument();
Dom.Load(HttpContext.Current.Server.MapPath(System.Configuration.ConfigurationSettings.AppSettings["urlRewriter"]));//从web.config读取设置文件URLRewriterSettings.xml的路径
System.Xml.XmlNodeList ItemList = Dom.SelectSingleNode(@"//URLRewriters").ChildNodes;
foreach (System.Xml.XmlNode Node in ItemList)
{
//if(!Node.HasChildNodes) continue;
string Ph = Node.Attributes.GetNamedItem(@"Path").InnerText.ToString();
string Rh = Node.Attributes.GetNamedItem(@"RealPath").InnerText.ToString();
if (Ph.StartsWith(@"~")) Ph = HttpContext.Current.Request.ApplicationPath + Ph.Substring(1);
if (Rh.StartsWith(@"~")) Rh = HttpContext.Current.Request.ApplicationPath + Rh.Substring(1);
//建立正则表达式
System.Text.RegularExpressions.Regex Reg = new System.Text.RegularExpressions.Regex(Ph, System.Text.RegularExpressions.RegexOptions.IgnoreCase);
System.Text.RegularExpressions.Match m = Reg.Match(Url);//匹配
if (m.Success)//成功
{
for (int i = 1; i <= m.Groups.Count; i++)
{
Rh = Rh.Replace("$" + i.ToString(), m.Groups[i].Value);
}
Context.Server.Execute(Rh); //就是这里报错 为Text.aspx执行子请求时出错。
Context.Response.End();
break;
}
}
Context.Server.Execute(Context.Request.Url.PathAndQuery);
}
/// <summary>
/// 实现“IHttpHandler”接口所必须的成员
/// </summary>
/// <value></value>
public bool IsReusable
{
get { return false; }
}
}
<?xml version="1.0" encoding="utf-8" ?>
<!--如有多个匹配,则优先级向下递减-->
<!--http://localhost:6679/httphandleUrlRewrite/22.html-->
<!--http://localhost:6679/httphandleUrlRewrite/a/b/c.html-->
<!--如有多个匹配,则优先级向下递减-->
<URLRewriters>
<URLRewriters Path=".index.aspx" RealPath="Text.aspx" /> //这里应该没问题. 都试过来了
<!-- <URLRewriters Path=".+?/(\d+).html" RealPath="~/aspx/show.aspx?id=$1" />
<URLRewriters Path="~/([^/]*)/([^/]*)/([^/]*).html" RealPath="~/aspx/show.aspx?par1=$1&par2=$2&par3=$3"/>-->
</URLRewriters>
<add key="urlRewriter" value="~/App_Data/URLRewriterSettings.xml"/>
<httpHandlers>
<add verb="*" path="?*.aspx" type="FyCms.Common.UrlRewriter" />
<!--加载重写类,并利用通配符粗略指定规则-->
</httpHandlers>