静态页、Url重写
页面静态化
优点:降低数据库、web服务器压力,访问速度比较快; 同时,让搜索引擎搜录该链接的几率大,有助于seo
思路:将"newsDetail.aspx?id=101"动态的生成的网页,下载到自定的文件夹,然后重新命名:20120319/101.htm。这样用户在访问的时候,就直接访问101.htm,静态页的好处这时就体现了。
示例代码:
//文章编号id
string newPath = id + ".htm"; string localPath = HttpContext.Current.Server.MapPath("~/20120319/" + newPath); //HostingEnvironment.MapPath(); //创建文件夹 Directory.CreateDirectory(Path.GetDirectoryName(localPath)); WebClient wc = new WebClient(); wc.Encoding = Encoding.UTF8; //通过WebClient向服务器发Get请求,把服务器返回的html内容保存到磁盘上。以后用户直接请求html文件请求。 wc.DownloadFile("http://localhost:7930/newsDetail.aspx?id=" + art.id, localPath);
页面的a标签就可以这么写:<a href='20120319/<%#Eval("id") %>.htm'><%#Eval("title")%></a>
静态页注意几个问题:
1.页面编码问题:需要保存的页面指明编码方式(<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />),
WebClient下载网页时,也要注意编码问题。
2.路径: 图片、js、css等都用绝对路径
3.页面上不要使用服务器控件,都用ajax处理
Url重写
页面静态化和URL重写目的不一样,URL重写和页面静态化都可以SEO,
但是URL重写SEO的开发难度小,页面静态化除了SEO之外还能大大降低服务器的压力。只有经常被访问的、很少变化的内容做成静态化。
示例代码
protected void Application_BeginRequest(object sender, EventArgs e) {
string url = HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath;//获得用户要访问的资源。这个属性获得的是虚拟路径 //判断用户访问的是否是/Art/newsDetail-101.aspx格式 Match match = Regex.Match(url, @"~/Art/newsDetail-(\d+)\.aspx"); if (match.Success) { string id = match.Groups[1].Value; //把客户端请求发给内部的其他页面 HttpContext.Current.RewritePath("~/Art/newsDetail.aspx?id=" + id); } }
顺便提下:C#跳转页的方式
Server.Transfer仅是服务器中控制权的转向,就同Application_BeginRequest事件处理一样,在客户端浏览器地址栏中不会显示出转向后的地址; Response.Redirect则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。
Server.Transfer是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。 这个过程中浏览器和Web服务器之间经过了一次交互。
Response.Redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求。这个过程中浏览器和Web服务器之间经过了两次交互。
很形象的例子:
你去专卖店里买电脑,告诉销售员A要买的型号,当前店里没有此型号的产品。
(Server.Transfer)方式是:A联系其他店里的销售员B,然后让B把货物送到A这里,你就可以顺利买到货物。
(Response.Redirect)方式是:A直接告诉B地有此型号的商品,你就跑到B的自己买去了,也买到货物了。
都可以买到货物,自己选择。