金色坐标

关注互联网和IT科技的个人博客

« 2009年第一天祝大家身体健康电脑故障初步检测步骤 »

如何在ASP.NET开发网站中实现URL自动重定向

在web.config文件里,有httpHandlers配置项,msdn对于此配置项的解释如下:

根据请求中指定的 URL 和 HTTP 谓词将传入的请求映射到相应的处理程序。可以在配置层次中的任何级别声明此元素。

简单的说,设置此值是为了实现url重定向。那么什么是url重定向以及为什么要做url重定向呢?我们举例进行说明:

假如你当前访问的网址是http://www.kingxy.com/hot/11.htm,那么你可能会认为在这个网站的hot目录下存在着11.htm这样一个文件,而实际上你却有可能根本找不到这个文件。因为实际上你看到的内容其实是http://www.kingxy.com/hotactive.aspx?id=11 ,url重定向即是截取传入的Web请求并自动将其重定向到其他 URL 的过程。

这样做的有如下好处:一是提升安全性,隐藏了参数”id”;二是缩短url,便于记忆,明显hto/11.htm 要比hotactive.aspx?id=11要更短小精悍,一眼就能记住;三是有利于增加对搜索引擎例如谷歌百度的友好度,从而可能会提升网站的收录和访问量。

那么如何在ASP.NET开发网站中实现url的重定向呢,主要可以分为如下三个步骤:

1,首先在网站项目中添加一个类,该类功能用来实现url的重写:

using System;
using System.IO;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.SessionState;
public class UrlHandler : IHttpHandler
{
 public void ProcessRequest(HttpContext context)
 {
  //取出原rul地址
  string absoluteUri = context.Request.Url.AbsoluteUri;
  string query = context.Request.Url.Query;
  if (!string.IsNullOrEmpty(query))
  {
   query = "&" + query.Substring(1);
  }
  //构造正则表达式
  Regex regex =new Regex(“^http://[^/]*/hot/(?<id>[0-9]+).htm”, RegexOptions.IgnoreCase);
  //按照正则表达式进行匹配
  if (regex.IsMatch(absoluteUri))
  {
   Match match = regex.Match(absoluteUri);
   //重写路径
   context.Server.Transfer(string.Format("/hotactive.aspx?id={0}"+ query, match.Result(“${id}”));
  }
 }

 // 实现“IHttpHandler”接口所必须的成员
 public bool IsReusable
 {
        get
  {
   return false;
  }
 }

}

该类就是将htm静态页面实际上指向了一个aspx的动态页面,返回的结果实际是动态页面结果,而现实的url则是htm静态页面。

2,配置web.config httphandlers元素:

<httpHandlers>
 <add verb="*" path="*.htm" type=" UrlHandler "/>
</httpHandlers>

verb属性说明了该handle所支持的http请求方式,例如支持post和get方式,verb属性则为"POST,GET";如果支持所有的请求方式,verb属性则用"*";path属性说明了对哪些文件的请求才调用该handle来处理,现在是对htm的文件,都要调用此handler进行处理;

type属性中指定了handle类的命名空间,类名和配件名(工程名)。ASP.NET runtime会首先到应用程序的bin目录下查找该配件的dll,如果没有找到再到GAC里查找。

3,配置网站:

IIS--》选中“默认网站”点右键--》选“属性”--》“主目录”--》“配置”--》点“映射”里的“添加”按钮--》 如图


浏览找到文件C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll,扩展名为.htm,最后“确认文件是否存在”,默认是选上的,因为本网站没有这个文件,所以不能勾选上,最后确认就可以了。

至此,大功告成!




原创文章,如转载请注明:转载自金色坐标 [ http://www.kingxy.com/ ]

本文链接地址:http://www.kingxy.com/archives/66.html

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

订阅博客

  • 订阅我的博客:订阅我的博客
  • 关注新浪微博:关注新浪微博
  • 关注腾讯微博:关注腾讯微博
  • 通过Google订阅本站
  • 通过鲜果订阅本站
  • 通过电子邮件订阅
  • 本站支持WAP访问

Search

Google

最新评论及回复

最近发表

金色坐标博客——京ICP备09009094号

本站采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载本站内容必须也遵循“署名-非商业用途-保持一致”的创作共用协议.
KingXY Blog - This site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License.