客户做一个网站,这个网站还要优化,也是我们公司做,为了方便优化人员更好的,更快的让搜索引擎收录该网站,要不生成全站静态,要不就是写成伪静态,对于我一个新人来说,全站生成静态还没接触过,伪静态也没弄过。通过拜读网上各位大神的杰作,慢慢的对这些有了一定了解。生成全站静态,确实好,都说会占资源,还对硬盘损害大,那我就专注于伪静态了。
通过请教一些高人,还有网上的资料,发现了伪静态的多种实现方法,不过都需要配置iis。通过高人的指点,自己感觉把正则写在Global.asax文件里还是比较舒服的,这样不用添加UrlRewrite组件,只用在iis中添加一个映射到.html的aspnet_isapi.dll就可以了,还是比较方便的。好了,闲话不多说,看看代码吧。 这里只是个人的一些方法,肯定还有许多好的方法来实现,希望大家都来发表一下自己的想法,共同学习一下。首先建立一个解决方案,名称随意 ,根据个人爱好。这里是我做的测试。
然后新建两个.aspx文件,名称比如a.aspx,b.aspx。 然后在Global.asax文件中添加以下代码 [csharp] using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Security; using System.Web.SessionState; using System.Text.RegularExpressions; namespace URLReWrite1 { public class Global : System.Web.HttpApplication { void Application_Start(object sender, EventArgs e) { // 在应用程序启动时运行的代码 } void Application_End(object sender, EventArgs e) { // 在应用程序关闭时运行的代码 } void Application_Error(object sender, EventArgs e) { // 在出现未处理的错误时运行的代码 } protected void Application_BeginRequest(Object sender, EventArgs e) { Regex reg = new Regex(".+b-(\\d+)-(\\d+).html"); var macth = reg.Match(HttpContext.Current.Request.Url.AbsolutePath); if (macth.Success) { String uid = macth.Groups[1].Value; String spid = macth.Groups[2].Value; HttpContext.Current.RewritePath(String.Format("b.x?uid={0}&spid={1}", uid, spid)); } } void Session_Start(object sender, EventArgs e) { // 在新会话启动时运行的代码 } void Session_End(object sender, EventArgs e) { // 在会话结束时运行的代码。 // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为 // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer // 或 SQLServer,则不会引发该事件。 } } }
然后在a.aspx文件里加一个超链接
[csharp] <span style="font-size:18px;"> <h3><a href="b-123-111.html">测试</a></h3></span>好了,接下来就是需要配置一下iis了,为你的网站添加一个应用程序扩展名为.aspx。路径为C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll。
然后再添加一个扩展为.html,路径还是这个C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll。 还有版本要选择正确,这样就可以了,浏览刚才的测试网站,点击测试,跳转了。此时的url显示的是b-123-111.html。 这样就实现了简单的伪静态。希望大家多来指导,怎么添加一个虚拟目录。就是这个目录不存在,想要显示在url中,比如显示成a/b-123-111.html。期待学习大家的想法。