网站SEO过程中发现URL重写实现伪静态原来并不难

网站要做SEO,地球人都知道,根据网站访问统计的结果,很大一部分来自百度搜索,少部分来自谷歌。

SEO一个很重要的方面就是进行路径的重写,也就是URL重写,实现伪静态,以前没做过,觉得可能会比较复杂,动手试了试,原来很好弄。

总的来说分三步,第一步:在web.config添加配置,第二步:写一个URL重写类,继承IhttpHandler接口,第三步:IIS配置

第一步:web.config添加配置

说动手就动手,打开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

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以后,如果不修改IIS,打开链接会报找不到文件的404错误,

以IIS5.1为例,因为我用的是XP系统,找到【主目录】选项卡,点击配置,弹出应用程序配置窗口,如图所示

网站SEO过程中发现URL重写实现伪静态原来并不难_第1张图片

添加一个和.aspx一模一样的扩展,只是后缀名为htm,另外有个注意点:

网站SEO过程中发现URL重写实现伪静态原来并不难_第2张图片

检查文件是否存在的勾√必须去掉。

你可能感兴趣的:(url重写)