您的位置:首页 > 大数据 > 人工智能

rewriter二级域名映射技术的实现方式介绍

2009-04-15 12:13 295 查看
     为什么要使用二级域名呢?如果从用户使用习惯来说,二级域名比二级目录更容易记忆,看上去更加直观,但从网站优化的角度讲意义就不同了,二级域名对搜索引擎来说相当于是一个独立域名,一个独立域名的权重自然是要比二级目录高了,所以在排名上就会有一定优势.这也是为什么这么多人都想实现二级域名的原因了.

     下面我们来说说二级域名主要的几种实现方式:

     第一种:使用第三方ISAPI工具,目前用的比较多的是ISAPI_Rewrite_Lite免费版,FUll版的需要花钱购买,目前网上出现的所谓full破解版的都是假的,还不能算真正破解,使用一段时间后,还是需要注册的.所以在这里我提醒大家千万不要用了,然后full版的功能比较强,对二级域名支持也比较好,我相信这个东西对个人来说没多少人会买吧,而且人家在国外毕竟也不方面.

     第二种:使用免费开源的组件,如果你是小网站,而且网站是用.net c#开发的话,最适合不过的就是微软提供的urlrewriter工具,下载地址:www.ytbxw.com/soft/urlrewriter.rar,但有个问题,该组件只支持无cookie的session,如果你的网站采用的是session的话,一转发session就会丢失,应该尽量改成cookie来实现,什么是无cookie的session呢,就是把session的信息存放在网址上,比如:http://(@23jshssdfsf)www.ytbxw.com,我想大家都不愿意看到这样的网址吧,如果你用了cookie,那就基本没什么问题了,不过如果你想实现二级域名的话还有一个问题,那就是cookie跨域名时候发现会丢失,因为每个二级域名相当于是独立的域名,你访问二级域名,也就等于访问了另一个网站,自然cookie就会丢失了,那有什么办法来解决呢,我们可以通过cookie的domain来解决,把domain设置为"ytbxw.com".为什么我前面说urlrewriter比较适合小网站呢,应该urlrewriter效率相对会比较低一点,而且有点吃内存,大一点的网站或者映射规则比较多的情况下是不推荐使用.

      下面介绍另一种开源的ISAPI工具Ionic's Isapi Rewrite Filter (IIRF),目前的最高版本是1.2.15,该工具是用C写的,执行效率比较高,如果你用的是vs2005,需要更改makefile,VC="C:/Program Files/Microsoft Visual Studio 8/VC",必须得加双引号,原文件中是没有的,否则编译会出错,如果你的网页中存在form提交的,地址重写后postback所指的是转发前的地址,所以就无法提交到相应的处理页面,可以在.net工程中新建目录App_Browsers,新建Form.browser文件,以下是内容:

<browsers>
<browser refID="Default">
    <controlAdapters>
      <adapter controlType="System.Web.UI.HtmlControls.HtmlForm"
               adapterType="Ytbxw.FormRewriterControlAdapter" />
    </controlAdapters>
</browser>
</browsers>

再创建一个类:

using System;
using System.IO;
using System.Web;
using System.Web.UI;
namespace Ytbxw
{
    public class FormRewriterControlAdapter :
        System.Web.UI.Adapters.ControlAdapter
    {
        protected override void Render(HtmlTextWriter writer)
        {
            base.Render(new RewriteFormHtmlTextWriter(writer));
        }
    }

    public class RewriteFormHtmlTextWriter : HtmlTextWriter
    {
        public RewriteFormHtmlTextWriter(HtmlTextWriter writer)
            : base(writer)
        {
            this.InnerWriter = writer.InnerWriter;
        }

        public RewriteFormHtmlTextWriter(TextWriter writer)
            : base(writer)
        {
            this.InnerWriter = writer;
        }

        public override void WriteAttribute(string name, string value, bool fEncode)
        {
            if (name == "action")
            {
                HttpContext context = HttpContext.Current;

                if (context.Items["ActionAlreadyWritten"] == null)
                {
                    value = context.Request.ServerVariables["HTTP_X_REWRITE_URL"]
                        ?? context.Request.RawUrl;
                    context.Items["ActionAlreadyWritten"] = true;
                }
            }

            base.WriteAttribute(name, value, fEncode);
        }
    }
}

 

作者:傅征宇      来源:www.ytbxw.com   转载请保留来源,非常感谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息