1/**//**//**////<summary>
2/**////重写Url
3/**////</summary>
4/**////<paramname="sender">事件的源</param>
5/**////<paramname="e">包含事件数据的EventArgs</param>
6privatevoidReUrl_BeginRequest(objectsender,EventArgse)
7{
8//获取基本配置信息
9BaseConfigInfobaseconfig=BaseConfigProvider.Instance();
10
11if(baseconfig==null)
12{
13return;
14}
15
16//得到论坛配置信息
17GeneralConfigInfoconfig=GeneralConfigs.GetConfig();
18HttpContextcontext=((HttpApplication)sender).Context;
19stringforumPath=baseconfig.Forumpath.ToLower();
20
21stringrequestPath=context.Request.Path.ToLower();
22
23if(requestPath.StartsWith(forumPath))
24{
25if(requestPath.Substring(forumPath.Length).IndexOf("/")==-1)
26{
27//声明并设置默认论坛模板
28stringstrTemplateid=config.Templateid.ToString();
29//判断COOKIE中模板是否是系统当前的有效(已入库)模板
30if(Utils.InArray(Utils.GetCookie(Utils.GetTemplateCookieName()),
31Templates.GetValidTemplateIDList()))
32{
33strTemplateid=Utils.GetCookie(Utils.GetTemplateCookieName());
34}
35
36//当访问的是首页时
37if(requestPath.EndsWith("/index.aspx"))
38{
39//当配置文件中未指定首页时,则将forumindex.aspx做为首页并重写路径
40if(config.Indexpage==0)
41{
42
43context.RewritePath(forumPath+"aspx/"+strTemplateid+"/forumindex.aspx");
44}
45else//否则使用聚合首页来做为网站首页并重写路径
46{
47
48context.RewritePath(forumPath+"aspx/"+strTemplateid+"/website.aspx");
49}
50
51return;
52}
53
54
55//当使用伪aspx,如:showforum-1.aspx等.
56if(config.Aspxrewrite==1)
57{
58//获取后台设置的可以使用的伪aspx设置.
59//SiteUrls.GetSiteUrls()类和方法说明见下文
60foreach(SiteUrls.URLRewriteurlinSiteUrls.GetSiteUrls().Urls)
61{
62//进行正则匹配,来看访问页面是否是用户定义的伪URL地址
63if(Regex.IsMatch(requestPath,url.Pattern,Utils.GetRegexCompiledOptions()|RegexOptions.IgnoreCase))
64{
65stringnewUrl=Regex.Replace(requestPath.Substring(context.Request.Path.LastIndexOf("/")),url.Pattern,url.QueryString,Utils.GetRegexCompiledOptions()|RegexOptions.IgnoreCase);
66
67context.RewritePath(forumPath+"aspx/"+strTemplateid+url.Page,string.Empty,newUrl);
68return;
69}
70}
71}
72
73
74
75context.RewritePath(forumPath+"aspx/"+strTemplateid+requestPath.Substring(context.Request.Path.LastIndexOf("/")),string.Empty,context.Request.QueryString.ToString());
76}
77//当前请求路径是“论坛路径/archiver(简洁版路径)/"下时.
78elseif(requestPath.StartsWith(forumPath+"archiver/"))
79{
80
81
82return;
83}
84//当前请求路径是“论坛路径/tools/(论坛工具页面如:rss,sitemap,help等)”请求时
85elseif(requestPath.StartsWith(forumPath+"tools/"))
86{
87
88return;
89}
90
91}
92}
93
94
1、
委托类型 EventHandler 在它的调用签名中定义了两个参数。第一个参数(名为 sender)是基于通用 Object 类型的。sender 参数用于传递指向事件源对象的引用。例如,当 Button 对象引发基于 EventHandler 委托类型的事件时,作为事件源的它将传递一个对自身的引用。此处的引用就是BeginRequest.
由 EventHandler 定义的第二个参数名为 e,它是 EventArgs 类型的对象。在许多情况下,事件源传递的参数值等于 EventArgs.Empty,这表明没有额外参数信息。如果事件源希望在 e 参数中传递额外的参数化信息,则它应该传递一个从 EventArgs 类的派生类创建的对象。
例子:
[code]
private void context_BeginRequest(object sender, EventArgs e)
{
HttpContext context = ((HttpApplication)sender).Context;
// 获取旧的Url
string url = context.Request.Path.ToLower();
// 重新生成新的Url
string newUrl = “123.aspx”; // 这里改下
// 重写Url
context.RewritePath(newUrl);
}
[/code]
context.Request.Path.ToLower(); 是取得URL中http://之后第一个“/”之后所有的字符串。也就是虚拟目录。ToLower是转为小写形式。
这样一来,只要我们访问了网站的任何页面,如1.aspx,其实是访问123.aspx,无伦1.aspx中有啥玩意一律不运行,因为就此例子中我们没有对URL进行任何判断。
还有就是,如果你在 这个类文件中 write Request.Path.ToLower 和在123.aspx中writ Request.Path.ToLower 其是完全不一样的,也就是说开发的时候就想着当前路径开发行了。
最后,再最后声明下,单纯的用web.config来实现URL重写,其后缀名转来转去还是只能是aspx,不过对于搜索引擎来说已经很好了。
优质内容筛选与推荐>>
1、html5实现渐变效果2、一种平面提取的点云简化算法3、树状数组 求区间和4、HDU 1029 Ignatius and the Princess IV5、滤镜模糊效果,利用了文字阴影和透明。其实是抄的iSlider官网的