热门关键字:
jquery > jquery教程 > .net > UrlReWriter为什么URL映射和重写很重要?

UrlReWriter为什么URL映射和重写很重要?

3624
作者:管理员
发布时间:2013/11/7 15:52:59
评论数:0
转载请自觉注明原文:http://www.jq-school.com/Show.aspx?id=362

此文章是由jquery学堂8群的网友【武汉-.net-小王】分享到群共享里面的,觉得对网友们的学习有帮助就把它整理分享到JquerySchool网站上了,希望大家好好利用哦。。。


下面是开发人员想要对URL有更大的灵活性的最常见的场景: 

1) 处理这样的情形:你要更改你的web应用中网页的结构,但你同时也要确保在你移动网页后,那些被人收藏的老URL不会成为死链接。重写URL允许你透明地将请求转交到新的网页地址而不出错。 


2) 在象Google,Yahoo 和 Live 这样的搜索引擎中提高你网站上网页的搜索相关性。具体地来说,URL重写经常能使你在你网站上网页的URL里更加容易地嵌入关键词,这么做往往会增加别人点击你的链接的机会。从使用查询字符串参数到使用完全限定(fully qualified)的URL也能在某些情形下提高你在搜索引擎结果中的优先顺序。使用强制referring链接使用同样的大小写(same case)和URL入口(譬如,使用weblogs.asp.net/scottgu 而不是 weblogs.asp.net/scottgu/default.aspx)的技术也能避免因跨越多个URL而造成的网页排名(pagerank)的降低(avoid diluting your pagerank across multiple URLs),从而增加你的搜索结果。 



在一个搜索引擎日渐驱动网站访问量的世界里,在你的网页排名上稍微得到一些提高就能给你的业务带来不错的投资回报(ROI)。逐渐地,这驱使开发人员使用URL重写以及其他SEO(搜索引擎优化 )技术来优化网站(注,SEO是个步调很快的空间,增加你的搜索相关性的建议月月在演变)

很多朋友一直考虑不清(我前几天也一直搞不明白)的问题是,我键入一个地址后,怎么这个url就被重写了?


第一步:在浏览器键入了一个地址,比如http://api.jq-school.com/,点回车后,都发生了什么?

为了把问题简单化,我来这样解释:


第二步:首先,键入的地址被解析,最终来到了一台web服务器.交给IIS处理.在.net的世界中,IIS会把这样的请求再交给一个web处理器 处理,最后,该 web处理器 把处理的结果返回给浏览器,显示给用户看.


请不用忽略这样一个问题,第二步的所有事情都是在服务器端做的.在这些事情进行的时候,用户端的浏览器上面的地址不会改变.即使最后 web处理器 把处理结果返回来的时候,上面的地址也不会改变.


一开始键入的url,只是起一个敲门的作用,门敲完了,作用就算结束了,只有你的眼睛可以看到那个地址,浏览器,服务器等都不知道这个地址.


然后要明白的问题是,所谓url重写,也只是web开发人员知道的内幕情况,用户根本不知道发生了什么,他认为自己键入的地址就是应该出来屏幕上显示的结果.也就是说,我们在幕后控制要显示的内容.


接下来要考虑的是,怎么样控制显示的内容?


从上面说的过程,很明显要在 web处理器 的工作这一步动手脚.

一个最简单的考虑是,用户敲入了一个简单的不带任何参数地址, http://api.jq-school.com/然后我们把这个地址改成一个符合程序需要的带参数的地址, http://www.jq-school.com/Article.aspx?id=1,最后处理之.


所谓的url重写,就是在这一步.
用.net的术语来说,我们需要给应用程序注册一个httpmodule,用来处理特定的url
注册httpmodule,在web.config,处理url,在我们提供的httpmodule程序中


接下来,我们来实现url重写.
第一步:确定要对哪些url执行重写,即制定重写规则
第二步:编写httpmodule处理程序
第三步:将编写的httpmodule整合入web程序,开始工作.


一般来说,要显示一些动态数据总是采用带参数的方式,比如制作一个UserInfo.aspx的动态页面用于显示系统的UserInfo这个用户信息表的数据,那么需要在其后带上一个参数来指定要显示的用户信息,比如UserInfo.aspx?UserId=1用于显示表中编号为1的用户的信息,如果为2则显示表中编号为2的用户信息。在一些系统中我们可能看到的不是这样的效果,可能会看到形如UserInfo2.aspx这样的形式(当然形式可以多样,只要有规律就行),当点击这样一个链接时看到的效果和UserInfo.aspx?UserId=2的效果一样,这里就用到了URL地址重写的目的。在其它动态语言如asp、JSP、PHP中要实现URL地址重写需要借助于其它的手段(有一些现成可用的用于实现URL地址重写的dll库),使用这些第三方手段时需要对IIS做些配置,如果网站放置在购买的虚拟主机上可能就不能够使用了(这种情况我以前就遇见过,当时曾经做过一个J2EE的网站放在虚拟主机上要对Tomcat做配置才能启用数据库连接池,但是虚拟主机提供商不提供这种服务),其实在ASP.NET中可以通过自定义IHttpModule就可以实现URL地址重写。


代码如下:


System.Web.HttpApplication application=(System.Web.HttpApplication)sender;
System.Web.HttpContext context=application.Context;
// System.Web.HttpResponse response=context.Response;
string path=context.Request.Path;
string fileName = System.IO.Path.GetFileName(path);

将UserInfor.aspx?UserId=5689格式改为UserInfor5689.aspx
Regex regex = new Regex("UserInfor(\\d+).aspx", RegexOptions.Compiled);
Match match=regex.Match(fileName);

if (match.Success)
{
   string UserId = match.Groups[1].Value;
   string strRewriterPath = "UserInfor.aspx?UserId="+UserId;
   context.RewritePath(strRewriterPath);
}




UrlReWriter.zip打包下载





如果您觉得本文的内容对您的学习有所帮助:支付鼓励



关键字:URL生写 URL映射 伪静态 asp.net UrlReWriter
友荐云推荐