如果你网站要更换新域名,必定会碰到迁移的问题。你不可以直接停止老域名的解析,因为这样做会让搜索引擎失去老的索引,然后降低你网站的排名,正确的方法是告诉搜索引擎,你已经改域名了。也就是当用户或搜索引擎访问你的旧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重定向了,搜索引擎也会及时的更新它的索引,把你的网站指向新域名。一段时间以后,你就可以放心停用老域名了。