如果你网站要更换新域名,必定会碰到迁移的问题。你不可以直接停止老域名的解析,因为这样做会让搜索引擎失去老的索引,然后降低你网站的排名,正确的方法是告诉搜索引擎,你已经改域名了。也就是当用户或搜索引擎访问你的旧URL时,将URL转向到新域名的对应位置。

比如我的博客,旧域名是diaosbook.com,新域名是edi.wang。那么对于之前对diaosbook.com的访问,如:

http://diaosbook.com/post/2015/4/22/how-to-read-webconfig-appsettings-with-bigiblity

需要转向到新域名:

http://edi.wang/post/2015/4/22/how-to-read-webconfig-appsettings-with-bigiblity

其实也就是替换域名部分,URL后面的所有内容都保持不变。

要实现这个跳转,就得在IIS上安装一个URL Rewrite模块,可以在这里 http://www.iis.net/downloads/microsoft/url-rewrite 下载安装。

装完以后,对于每一个网站,IIS的管理器里都可以指定单独的URL重写规则,既可以通过图形化界面配置,也能用web.config文件配置。

刚才重写我博客域名的config如下:

<system.webServer>
    ...
    <rewrite>
      <rules>
	...
        <rule name="CanonicalHostNameRule">
          <match url="(.*)" />
          <conditions>
            <add input="{HTTP_HOST}" pattern="^diaosbook.com$" />
          </conditions>
          <action type="Redirect" url="http://edi.wang/{R:1}" />
        </rule>
      </rules>
    </rewrite>
</system.webServer>

pattern有好几种匹配方式,我这里是用正则的。匹配{HTTP_HOST}也就是域名是否和字符串“diaosbook.com”一致。一致的话就用action中的配置,重定向到新域名。

action里Url后面的{R:1},代表URL域名之后的所有内容。

type有两种,Redirect和Rewrite,是不一样的。Redirect是重定向,会产生一个HTTP 301,也就会通知搜索引擎老URL已经无效了以及新URL的位置。而Rewrite只是重写,HTTP状态码还和之前的一致,比如你有一个/a/b/c.html,要重写为/d.html,那么Rewrite只会把c.html的内容给塞到/d.html里去,看起来就好像/d.html存在一样。

如果你有其他rule,得注意顺序,是从上至下匹配的。

其他配置可参考微软的官方文档:http://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference

现在就可以得到一个301重定向了,搜索引擎也会及时的更新它的索引,把你的网站指向新域名。一段时间以后,你就可以放心停用老域名了。