为什么要使用二级域名呢?如果从用户使用习惯来说,二级域名比二级目录更容易记忆,看上去更加直观,但从网站优化的角度讲意义就不同了,二级域名对搜索引擎来说相当于是一个独立域名,一个独立域名的权重自然是要比二级目录高了,所以在排名上就会有一定优势.这也是为什么这么多人都想实现二级域名的原因了.
下面我们来说说二级域名主要的几种实现方式:
第一种:使用第三方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 转载请保留来源,非常感谢!