很多网站都在跳转前增加一个链接,一方面为了防止另外的网站通过Referer获取信息,另一方面可以掌握访客点击链接的数据,因为如果跳转到站外就没有Web日志,对用户点击站外链接的情况就会一无所知。话不多说,记录一下方法
首先在Wordpress数据库执行以下SQL语句增加一张记录链接点击的表
CREATE TABLE `wordpress`.`wp_click` ( `id` BIGINT NOT NULL AUTO_INCREMENT , `url` TEXT NOT NULL , `time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP , `ip` VARCHAR(50) NOT NULL , `ua` TEXT NOT NULL , PRIMARY KEY (`id`) ) ENGINE = InnoDB;
随后在网站根目录建立名为go的文件夹(这个文件夹可以任意起名,只要把之后相应位置的所有go改为自定义的名字就行),在go文件夹下创建 .htaccess和index.php两个文件
.htaccess文件内容如下
RewriteEngine On RewriteRule ^index\.php$ - [L] RewriteRule . index.php [L]
index.php文件内容如下
<?php $url=substr($_SERVER['REQUEST_URI'],4); if (strtolower(substr($url,0,4))!='http' || substr($url,0,9)=='index.php') exit('无效网址'); require( '../blog/wp-load.php' ); $wpdb->insert('wp_click',array( 'url'=>$url, 'ip'=>$_SERVER['REMOTE_ADDR'], 'ua'=>$_SERVER['HTTP_USER_AGENT'] )); header('Location: '.$url);
为了防止无限跳转,php程序中禁止了相对路径和对index的访问。代码中第5行require的是博客目录下的wp-load.php,前面的 ../blog/ 是因为我放在blog目录下,如果相对路径不同需要修改require的参数
到此就写好了跳转记录功能,例如访问https://www.zhouii.com/go/https://www.baidu.com/就能跳转到百度了,通过phpMyAdmin等软件就可以从数据库中看到访问记录,通过SQL语句还能实现各种统计
接下来需要修改Wordpress代码使文章显示时给所有链接前加上https://www.zhouii.com/go/
从Wordpress后台“外观”下的“主题编辑器”修改functions.php,增加如下代码
function record_click($content) { preg_match_all('/<a.*?href="(.*?)".*?>/',$content,$match); if($match){ foreach($match[1] as $url){ if(strpos($url,'://')!==false && strpos($url,home_url())===false){ $content=str_replace("href=\"$url\"", "href=\"".home_url()."/go/$url\" ",$content); } } } return $content; } add_filter('the_content','record_click',999);
这段代码可以在输出内容前先由record_click函数处理,函数内修改外链给链接前增加https://www.zhouii.com/go/,不修改本站链接(无论是相对路径还是绝对路径)因为本站的链接点击能从日志得知,无需多耗资源来跳转和记录。
从此任何人点击本站的外链我都能记录并进行统计啦
2020年3月5日