I am LAZY bones ? all linux

对老域名用PHP写了个301重定向

之前,这里的域名一直都是 li2z.cn ,但是,被CNNIC逼得走投无路以后,我终于把域名换成 luy.li 了。其实准确的说,不是“换”,是加了一个域名,并射成默认了而已,因此用 li2z.cn 还是可以访问的,甚至连301都没有做,之前我的做法只是把两个域名的后台路径指向同一个了而已(题外话:由于两个站的内容完全一致,所以被google惩罚了,li2z.cn 的PR瞬间就变成0了,所以在意PR的站长千万别这么干哦~)。
现在,时间也过去这么久了,大多数的流量已经是新域名下的了,但是老域名的流量也还有不少,于是我就想能不能在不影响访问的同时,统计一下老域名的每次http请求的来路。
方法自然是把所有request用301重定向到 luy.li 的对应地址,然后在日志里记录refer了(不明白301和refer的请自行google基础知识)。
这个用我三脚猫的php都很容易搞定,就几行代码,index.php如下:

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://luy.li".$_SERVER['REQUEST_URI']);
date_default_timezone_set('Etc/GMT-8');
$msg = date('Y-m-d H:i:s').' '.$_SERVER['HTTP_REFERER'].' '.$_SERVER['REQUEST_URI']."\n";
file_put_contents('log.txt',$msg,FILE_APPEND);
?>

然后,建个 .htaccess 把域名下的所有请求都指向 index.php:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>

测试一下,对get请求,可以完整地转到新的域名了:

$ curl -v "http://li2z.cn/abc?xxx=yyy"
* About to connect() to li2z.cn port 80 (#0)
* Trying 66.147.240.158… connected
* Connected to li2z.cn (66.147.240.158) port 80 (#0)
> GET /abc?xxx=yyy HTTP/1.1
> User-Agent: curl/7.21.1 (i686-pc-linux-gnu) libcurl/7.21.1 GnuTLS/2.10.2 zlib/1.2.5
> Host: li2z.cn
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently < Date: Sat, 02 Oct 2010 12:05:53 GMT < Server: Apache < X-Powered-By: PHP/5.2.14 < Location: http://luy.li/abc?xxx=yyy
< Cache-Control: max-age=1 < Expires: Sat, 02 Oct 2010 12:05:54 GMT < Vary: Accept-Encoding < Content-Length: 0 < Content-Type: text/html < * Connection #0 to host li2z.cn left intact * Closing connection #0 然后在后台目录里会生成一个 log.txt ,里面会有所有访问的时间、refer和uri,这样日后就可以方便地查出老域名的所有来路和受访页面了,最重要的是,由于有301,还不会对正常访问造成影响哦~

最后修改时间: 2010年10月02日 20:34

本文章发表于: 2010年10月02日 20:34 | 所属分类:编程相关. | 您可以在此订阅本文章的所有评论. | 您也可以发表评论, 或从您的网站trackback.

5 个评论 关于: “对老域名用PHP写了个301重定向”

  1. xiooli 在 2010年10月02日 22:10 说:回复

    向来用老域名访问的飘过兼抢沙发。

  2. 丕子 在 2010年10月03日 07:49 说:回复

    我订阅的难道是老域名的RSS?

  3. 老犁 在 2010年10月03日 09:01 说:回复

    配置个别名站点不行吗?
    DocumentRoot “/usr/local/htdocs/luy.li”
    ServerName luy.li
    ServerAlias li2z.cn

    这样也不用改php文件啊

  4. delectate 在 2010年10月15日 17:18 说:回复

    据说google 不再更新了……一切只能靠rp了

  5. speedup2010 在 2010年11月24日 17:15 说:回复

    多謝骨頭前輩,我如法炮制了。

发表评论