网站要做SEO,地球人都知道,根据网站访问统计的结果,很大一部分来自百度搜索,少部分来自谷歌。
SEO一个很重要的方面就是进行路径的重写,也就是URL重写,实现伪静态,以前没做过,觉得可能会比较复杂,动手试了试,原来很好弄。
总的来说分三步,第一步:在web.config添加配置,第二步:写一个URL重写类,继承IhttpHandler接口,第三步:IIS配置
说动手就动手,打开VS2008,新建一个网站URLRewrite,打开web.config文件,在里面添加配置信息,如图所示位置
在图中所示的httpHandlers节点处添加子节点既可以,Verb表示请求类型,比如GET,POST等,path表示路径,type也就是哪个类来具体处理这个请求。* 表示通配符。下面举例说明
1.比如重写到某个目录
<add verb="*" path="test/*" type="CustomHttpHandler"/>
表示对test目录下的所有文件进行URL重定向,CustomHttpHandler文件是我们自定义的一个重写类。
这个目录可以存在,可以不存在,两者有区别:存在的话CSS,JS,图片,文件路径可以用相对路径,基本不要动原来的,不存在的话,CSS,JS等就要采用绝对路径了。
2.比如重写成某类文件,这个后缀名常用的都是可以定义的。
<add verb="*" path="product/*.htm" type="CustomHttpHandler"/>
表示打开链接中product目录下含有html文件都要进行URL重定向,如果你定义的后缀名在IIS扩展中没有,需要另外在IIS中添加扩展对应关系。
比如重写之前的地址可能是product/Default.aspx?id=2 那么重写之后变成product/2.htm
CustomHttpHandler.cs文件继承IhttpHandler接口,接口包含IsReusable属性和ProcessRequest方法,
ProcessRequest:用来处理http请求。
IsReusable:表示是否可以重用处理多个同类型的http请求。
下面进行重写,直接上代码,针对上面的两个示例写的
public class CustomHttpHandler : IHttpHandler { public CustomHttpHandler() { // //TODO: 在此处添加构造函数逻辑 // } // 是否可以重用 public bool IsReusable { get { return true; } } // 处理Http请求类 public void ProcessRequest(System.Web.HttpContext context) { // 获取当前链接地址 string url = context.Request.Url.PathAndQuery.ToString(); string realUrl = string.Empty; // 这里用泛型来实现 Dictionary<string, string> urlDic = new Dictionary<string, string>(); urlDic.Add("/test", "/news/Default.aspx"); // 虚目录例子 urlDic.Add("product/(\\w+).htm", "product/Default.aspx?id=$1"); // 伪静态例子 // 循环判断 foreach (var item in urlDic) { // 匹配 if (Regex.IsMatch(url, item.Key, RegexOptions.IgnoreCase)) { // 替换 realUrl = Regex.Replace(url, item.Key, item.Value, RegexOptions.IgnoreCase); } } if (realUrl != "") { // 直接执行真实URL context.Server.Execute(realUrl); } else { context.Response.Write("重写异常"); } context.Response.End(); } }
这个类运用的最多的是正则表达式,匹配和替换,正则表达式学个1-2个小时,基本上简单的都会用的。有一个注意的地方,要替换的地方加()即可,这个我也搞了蛮久的,一直替换不了。
到这里为止,在VS2008基本上可以运行测试了,在default.aspx文件里有例子。
发布部署到IIS以后,如果不修改IIS,打开链接会报找不到文件的404错误,
以IIS5.1为例,因为我用的是XP系统,找到【主目录】选项卡,点击配置,弹出应用程序配置窗口,如图所示
添加一个和.aspx一模一样的扩展,只是后缀名为htm,另外有个注意点:
检查文件是否存在的勾√必须去掉。