Archive

Posts Tagged ‘301 redirection’

Change of Domain Name

December 29th, 2009 Iron_Feet 19 comments
分享家:Addthis中国

想起刚刚搭建“风云阁”时候,就有位老站长和我说过:建站要有耐心,要经得起折腾!这段时间我终于感受到了。

最近由于一些基本大家都能猜到的且不可抗拒的原因,我考虑良久决定,将风云阁域名从 iron-feet.cn 更换为 iron-feet.com 。
域名的更换给各位朋友们带来的不便真的是非常抱歉。但是为了能和朋友长久地一起交流技术和分享生活的喜怒哀乐,不得不出此下策。

目前通过 iron-feet.cn 访问风云阁,会自动跳转至 iron-feet.com。该跳转会一直保持到 iron-feet.cn 域名过期。但是还是劳烦各位朋友们做点更改。

  • 将本站作为友链以及加入收藏夹等等的朋友们,请各位更新一下您的地址。我在此不甚感激。
  • 利用订阅器订阅本站的朋友们,如果您是通过本站的Feedsky和Feedburner地址来订阅的,那就无须任何改动了。如果您是通过本站前域名 iron-feet.cn订阅的 ,那请更新一下订阅地址。您可在本站右侧侧边栏获得订阅地址,非常感谢!我会依然尽所能地认真的维护本博,和朋友们分享点滴和交流技术。

目前为止,我认识的部分站长和博主都纷纷开始更换域名了。因此我相信目前想更换域名的应该不占少数。接下来我会就更换域名一些注意事项列举一下(以下都是以本站为例 ):

  1. 域名的更换:
    进入Wordpress的后台,Setting->General,将WordPress address、Blog address里面的 http://www.iron-feet.cn 改为 http://www.iron-feet.com
  2. SEO问题的解决方法:
      你需要让搜索引擎知道你的站点更换域名了,

    1. 根据Google官方的说明:

      If you’ve moved your site to a new domain, you can use the change of address tool to tell Google about your new URL. We’ll update our index to reflect your new URL.

      如果您用的是主机是支持URL Rewrite的话,可以通过在.htaccess添加这么几行来实现(多谢Solrex的提供)

      RewriteEngine On
      RewriteCond %{HTTP_HOST} ^([^.:]+\.)*iron-feet\.cn\.?(:[0-9]*)?$ [NC]
      RewriteRule ^(.*)$ http://www.iron-feet.com/$1 [R=301,L]

      当然如果您的主机不支持URL Rewrite也不用着急,我们可以用PHP来实现。请在Wordpress根目录的index.php的一开始加上这段代码。

      $i= isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '');
      switch ($i)
      {
      case "www.iron-feet.cn":
      	header("HTTP/1.1 301 Moved Permanently");
      	header("Location: http://www.iron-feet.com".$_SERVER["REQUEST_URI"]);
      	exit();
      	break;
      case "iron-feet.cn":
      	header("HTTP/1.1 301 Moved Permanently");
      	header("Location: http://www.iron-feet.com".$_SERVER["REQUEST_URI"]);
      	exit();
      	break;
      }

      当然以上的操作实现的另外一个前提是,您的旧域名近期依然指向该站点。其实301跳转不但是对搜索引擎收录有帮助,同样也能够及时告诉关注您网站的朋友们您已经更换域名了。

    2. 利用Google的Webmaster Tool
      具体操作就不再赘述,请参见Google的帮助文档
    3. Sitemap地址的修改
      由于通常Robots.txt中Sitemap的地址都是写的绝对地址,所以更改域名后,千万不要遗忘更新您的Sitemap地址,以便Google可以及时抓取您的更新日志。
      当然如果您是用Wordpress的Google SiteMap插件,并且勾选了“Add sitemap URL to the virtual robots.txt file.”,那您就可以安逸地不用担心Sitemap的地址问题了。
  3. Feed的更新:
    相信很多博主都喜欢用Feedsky和Feedburner来管理自己的Feed,因此修改域名后,你需要将Feedsky和Feedburner指向您新的Feed地址。这样就不会影响朋友们继续及时关注您的文章了,嚯嚯!
  4. 适当的代码修改:
    通常情况下,我们写代码都是能利用相对路径是最好的,因为这样子兼容性比较好。但是有时候遇到想Sitemap之类的需要用绝对地址的,或者个别朋友因为编程习惯有所欠缺而引起的一些域名更换的不兼容问题,那就需要稍微对代码进行修改一下。
  5. 工具的再配置:
    Google Analytics和Google Webmaster这类工具在我看来,是建站必不可少的工具。所以更换域名过后对这些工具的在配置也是必需的。他能让你很快的知道最近站点的状态等等。

具体只能想到的就是这些了,如果有什么遗漏的和错误的请大家提出,谢谢!

PS:元旦快到了,祝大家新年快乐,万事如意!


以下更新于2009/12/29 21:40
如果您使用了Mail to Commenter之类的邮件插件,记得将源代码中的邮箱地址更新为您的新域名。例如我的就是从noreply@iron-feet.cn改为noreply@iron-feet.com。同样记得在你的空间邮件服务器添加上该邮箱帐户。

Categories: IT Tags: , ,

The Free Lunch is Not Delicious-HTTP Header Restriction

August 14th, 2009 Iron_Feet 2 comments
分享家:Addthis中国

作为一个穷人而言,总是希望能寻找到一点免费的午餐。当然这种行为也是很可以理解的。不可否认的是,我就是这个大队伍里面的一员。
我似乎更觉得,也许哪天我不再是一个穷人了,我仍然寻找免费的午餐。因为现在我身处这个大队伍中,并没有觉得有什么不好。

在开源、免费的世界中徘徊,我不是开源信徒,我只是希望自己能自豪的说:我现在用的东西,要么是自己买的,要么就是免费的,我不用盗版。

废话说了一堆,言归正传。
前段时间,在提到过我的Blog换服了。在换服之前,我也做了一些调研,发现口碑最好的两个是000webhost000space。网上关于他们的文章可谓是铺天盖地了。

这两个免费主机供应商,前者比后者更为老牌。
000webhost也见识到了中国网民对免费的热情。面对中国网民疯狂的注册,000webhost不堪重负,限制了中国的IP,因为中国IP段的朋友们想注册000webhost的服务,只能通过代理了。而且000webhost还对部分代理进行了屏蔽。笔者曾通过代理申请过,最后很点背地使用到了一个被屏蔽的代理,导致我的域名被000webhost放入了黑名单。最后我通过美国IP的朋友申请到了空间也是徒劳,黑名单中的域名不再允许绑定,凄惨啊。

无奈之下,我注册了000space,并且沿用至现在。000space的使用也让我深深体会到了,免费的午餐并不是非常可口。
最近有朋友向我反映,只要在机器上没有我站点的缓存,通过外链点击到我的风云阁就会出现403错误,并被强制跳转到一个http://xxxx.xxxx.com/notify/2.php页面,让人很是抓狂。一开始我并没有注意,直到几天之内不止一个人向我反映了这个问题,我开始关注了,同时注意到我的Google Analytics出现一个很漂亮的低谷。

很有钻研精神的Solrex同学发现,000space的服务器MS对HTTP Header严格的限制。比方说,非同域名的Referer,就会403跳转;非Mozilla的标准浏览器User Agent,它也会跳转。这个让我非常的崩溃。

关于这个问题,万恶的懒惰的客服也没有给予我答复,看来只能自己解决了。为了防止跳转到别的域名,首先我得自己定义一个403页面,来防止跳转。但是就算定义了自己的403页面,但每次只能别人通过外链点击进来就是个403页面也不是个办法啊。

一开始我很天真地认为如果在403加了个301重定向

<?php
Header( "HTTP/1.1 301 Moved Permanently" );
Header( "Location: http://".$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"] );
?>

事实证明,这个想法相当的蠢,在Firefox下直接提示“发现循环重定向”,IE和Chrome则是不停地重定向到403页面,没完没了了。

其实目前的问题就是外链点击进去,就会403,但是直接在地址栏输入地址就完全没有问题。于是我再次考虑,如果用Javascript模拟输入地址,是否可以达到效果。

<script>
	location.href="<?php echo "http://".$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"]; ?>";
</script>

出现了一样的结果,不停地重定向到了403页面。

朋友曾和我提到过,网站只要缓存过了,通过外链就可以转到我的站点了,我设想难道是403页面被缓存了,理论上来说,通过javascript这样子跳转是不属于Referer的,应该不会被403。只能在前面添加一个清空客户端缓存的代码试试看了。

<?php
	header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
	header("Last-Modified: ". gmdate("D, d M Y H:i:s")."GMT");
	header("Cache-Control: no-store, no-cache, must-revalidate");
	header("Cache-Control: post-check=0, pre-check=", false );	
	header("Pragma: no-cache");	
?>
<script type="text/javascript">
	location.href="<?php echo "http://".$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"]; ?>";
</script>

事实证明,我的想法没错,这次成功了。
然后,我还曾试过一次在前面提到的301重定向前面再加一个清空缓存操作,但是事与愿违,并没有达到效果,依然是不停地重定向到403页面,让我着实费解。
因为403页面也属于是在我域名,从我的域名页面301重定向到同域名的页面,理论上来说是不会出现403了呀。如果是因为403页面被缓存了,那我在重定向之前也做了清空缓存的操作了,为什么还是会不断的重定向到403呢?

现在虽然解决了外链点击过来不能正常显示的问题。但是毕竟用的不是301重定向,因为对于SEO还是很不友好的。如果哪位朋友能明白前面301重定向的思路有什么问题的话,请告知,我会非常感激!

最后,非常感谢在我调试的时候,Gu Jun和Solrex不厌其烦的帮我测试。