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

    技术2022-05-11  12

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

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

         第一种:使用第三方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   转载请保留来源,非常感谢!


    最新回复(0)