WordPress

/标签 WordPress

解决网站被特定IP消耗流量的办法

博客空间从3月起不到10天的时间就被耗完所有传输流量。

起初试过百度云加速的安全防护功能,结果无效。后来把安全级别调到最高也没用。

之后看了网站的日志记录,发现有子域名网域关联被攻击的可能,于是把自己不用的网站关了。从日志看到少了些子域名的访问,但那几个访问大的IP依然阻止不了。

后来以为是百度云加速的网站检测影响,结果没多大变化,包括360的网站安全检测也不是耗流量的原因。

直到这个月,关5天发现Wordpress的登陆页面多其它网页多很多,百度上也有提到过这几个IP有破解网站密码的可能。于是配置Apache的文件,没什么用,估计虚拟空间某些功能用不了。然后下了个WP-Ban的插件解决了问题,终于可能将那几个讨厌的IP拒之门外了。

下面是拦截记录:WP-BAN

从索引量来看,并没有因为网站耗完流量访问不了,而减少索引,这可能是用百度云加速的一个好处吧。

By |2016-06-10T18:22:42+08:00六月 8th, 2016|原创|2 Comments

如何合理的处理七牛cdn加速功能造成网站被镜像的问题

很多小伙伴都在使用七牛cdn来加快网站的访问速度,尤其是七牛的静态文件镜像功能更是非常方便的帮站长把网站本地的静态文件同步到七牛的cdn服务器上,不过呢很多小伙伴在使用七牛的cdn镜像一段时间之后都发现网站莫名其妙的被百度降权了,才发现原来七牛的镜像功能会把网站的html内容也镜像到七牛上,这样一来就相当于七牛上存在一个镜像站点,对于SEO来说是非常不友好的,所以也就造成大量使用了七牛镜像功能的网站被百度降权。当时爆出这个问题的时候七牛官方给出了一个处理方法,就是上传robots.txt来禁止爬虫抓取镜像站点,不过这种方法完全是治标不治本的方法,下面给出一个比较合理的处理方案:

通过UserAgent来屏蔽七牛镜像爬虫对网页文件的抓取,代码如下:

1
2
3
4
5
if( strpos($_SERVER['HTTP_USER_AGENT'],'qiniu-imgstg-spider') !== false) {
header('HTTP/1.1 503 Service Temporarily Unavailable');
echo '防七牛镜像';
exit;
}

将以上代码加到网站根目录呃index.php文件的<?php之后即可,或者加到主题的functions.php文件也行,这段代码不仅仅是wordpress程序可用,任何php的程序都能用来处理七牛cdn镜像造成的网站被镜像文件。

加上以上代码,七牛cdn的镜像爬虫再来镜像网页文件就会返回503状态:

直接访问镜像站点,效果图:

qiniudn-mirror

日志中的记录:

qiniudn-log

由于只是在php上做限制所以不影响其他静态文件的镜像加速~~。

2014.11.13补充

使用了WP Super Cache插件的小伙伴请将七牛的ua加入到禁止缓存列表中,如下图:

qiniudn-ban

PS:如果之前已经被七牛镜像了,请先清空七牛的缓存,或者添加代码后更新缓存。

原文链接:http://www.v7v3.com/wpjiaocheng/2014111307.html

By |2019-04-09T09:26:15+08:00六月 21st, 2015|未分类|5 Comments

整理博客

最近续完费,花了一些时间打理博客,不仅从技术层面,还包括内容层面。

技术层面,改网站的前端CDN,地址是日本的,然后用百度的云加速服务。不一定是多此一举,毕竟香港的前端CDN有太多人用了,而且之前也有访问不到的情况。

然后,处理七牛cdn镜像加速功能造成的网站被镜像问题,并清空七牛空间的静态文件,让文件重新缓存。

设置博客的多媒体,让它在上传图片时不要自动切割成多个尺寸的图片,并且在FTP空间中删掉了其它尺寸的图片,只留原图。

让作者的头像和页头的头像指向本地的图片,而不引用Gavatar的地址。

内容层面,准备给网站备案,去掉一些可能有些敏感的文章。

排版以前一些的文章。从本地或其它博客复制过来,会出现一些问题。

将文章的图片都改为引用原图,这就不会出现缩略图空缺而不显示的情况。

By |2016-05-02T19:05:06+08:00六月 20th, 2015|原创|5 Comments

继续折腾wordpress

最近安装了柳城的自助友情链接插件将调用代码加在了页脚和友情链接的页面里。调用代码后发现数据库错误,原来插件只支持默认数据表表头wp_,所以如果安装时表头改的话要修改seo_friend_link.php里的wp_termst和wp_term_taxonomy,将前缀改成自己的表头。

关于链接自己也加入了360友链平台,将它的代码也加到页脚和友情链接的页面里。

将一般的百度统计代码改成异步统计代码。

将Gravatar头像缓存到本地的代码改成露兜博客修改的代码,去掉用七牛缓存的形式。

  • function my_avatar( $email, $size = ’50’, $default = ”, $alt = ”) {
  • $f = md5( strtolower( $email ) );
  • // 以下代码将头像缓存到wp-content目录下
  • $a = WP_CONTENT_URL . ‘/avatar/’. $f . $size . ‘.png’;
  • $e = WP_CONTENT_DIR . ‘/avatar/’ . $f . $size . ‘.png’;
  • $d = WP_CONTENT_DIR . ‘/avatar/’ . $f . ‘-d.png’;
  • // 如果要将头像缓存到当前主题目录下,请将3-5行代码改成:
  • // $a = get_bloginfo(‘template_url’) . ‘/avatar/’. $f . $size . ‘.png’;
  • // $e = get_template_directory() . ‘/avatar/’ . $f . $size . ‘.png’;
  • // $d = get_template_directory() . ‘/avatar/’ . $f . ‘-d.png’;
  • if($default==”)
  • $default = ‘http://articuly.com/avatar/avatar.jpg’;
  • $t = 2592000; // 缓存有效期30天, 这里单位:秒
  • if ( !is_file($e) || (time() – filemtime($e)) > $t ) {
  • if ( !is_file($d) || (time() – filemtime($d)) > $t ) {
  • // 验证是否有头像
  • $uri = ‘http://www.gravatar.com/avatar/’ . $f . ‘?d=404’;
  • $headers = @get_headers($uri);
  • if (!preg_match(“|200|”, $headers[0])) {
  • // 没有头像,则新建一个空白文件作为标记
  • $handle = fopen($d, ‘w’);
  • fclose($handle);
  • $a = $default;
  • }
  • else {
  • // 有头像且不存在则更新
  • $r = get_option(‘avatar_rating’);
  • $g = ‘http://www.gravatar.com/avatar/’. $f. ‘?s=’. $size. ‘&r=’ . $r;
  • copy($g, $e);
  • }
  • }
  • else {
  • $a = $default;
  • }
  • }
  • $avatar = “<img alt='{$alt}’ src='{$a}’ class=’avatar avatar-{$size} photo’ height='{$size}’ width='{$size}’ />”;
  • return apply_filters(‘my_avatar’, $avatar, $email, $size, $default, $alt);
  • }

主题Functions.php里面加入调用PHP文件的代码,以后将代码加入到主题apps文件夹里的PHP文件就可以自动调用。

  • define(‘theme_apps’, TEMPLATEPATH.’/apps’);//在此定义存放php文件的文件夹名称
  • IncludeAll( theme_apps );
  • /**
  • * include all PHP script
  • */
  • function IncludeAll($dir){
  • $dir = realpath($dir);
  • if($dir){
  • $files = scandir($dir);
  • sort($files);
  • foreach($files as $file){
  • if($file == ‘.’ || $file == ‘..’){
  • continue;
  • }elseif(preg_match(‘/.php$/i’, $file)){
  • include_once $dir.’/’.$file;
  • }
  • }//end foreach
  • }//end if
  • }

在RSS输出中加入查看全文的链接。 在主题header中调用 flush() 函数,加速WordPress博客,在</head>后面添加以下代码即可:

  • <?php flush(); ?>

这行代码只是强制服务器在发送其他内容之前,先发送你的网站头(header)。通过使用 flush() 函数,浏览器就可以在等待网页其他内容的时候,下载网页头中引用的所有样式表。 保护WordPress的主题的方法之一可以隐藏登录错误。这样做的原因是,不管什么时候,你输入正确的用户名,但是输入的是错误的密码,那么系统就会提示:”错误:密码不正确。忘记密码?”,这样就是直接暗示恶意用户,这个用户名是正确的,只要不断地尝试其他密码,迟早可以破解处你的登陆密码。同样,当你输入一个不存在的用户名是,会出现提示”错误:不可用的用户名”,同样也可以暗示这个用户名是不可用,再换其他用户名,这样又减少了一种可能。 为了不让这样的问题发生,你需要在 functions.php 文件中添加:

  • add_filter(‘login_errors’, create_function(‘$a’, “return null;”));

这个过滤器可以去除登陆错误时出现标准错误信息。 为防止其他文件的页面异常导致本地路径泄漏的漏洞,在/wp-includes/user.php等加入这这段PHP代码:

  • <?php error_reporting(0); ?>

做这些记录也是防止自己会忘掉。

By |2016-05-02T19:04:35+08:00七月 31st, 2014|原创|16 Comments

2014年Godaddy退款经验

最近换了主题,原来不想动空间的,只是用了安全宝加速一段间之后,它从日本的加速节点换成了美国的加速节点,速度就慢了,本来就是Godaddy的美国主机,再用美国的加速节点就没有多少意义。于是就想起之前Godaddy的退款经验,那是非常好说话的事情,不像在淘宝购物退款那样困难。

总的来说,Godaddy的退款政策基本上算是非常让人接受,按年购买的45天内的按原价退,45天之后的按比例退回到Instore Credit之中,只要在服务期内都能退。退款政策我就不翻译了,非常好懂。只是没有完美的事会发生,想用了多久都可以按原价退回到原来付款方式上是不可能的,否则会有更多代购主机的骗子,他帮你买可以在任何时间退回到自己钱包里。

2013年夏天买了它们的Linux经济型主机两年,用了50.23美元,2015年7月22日到期的,用到2014年6月24日差不多到一年,最后退了27.22元,够大方了。

退款的方法很简单:

备份好你的主机,数据库或DNS记录。

然后在对应的产品点取消Cancel。

hosting

接着就是要联系他们的客服,在Support页面点Live Chat,跟他说明情况。这点跟2013年的退款方式很不一样,因为以前在Support是可以提交工单Ticket给他们,然后等他们回复。现在要在美国山区时间早上9点到凌晨,也就是北京时间晚上11点到白天下午2点。所以就有这点不便。我早上9点在系统排队,大概等了30分钟。其实这算快了,之前跟速卖通的线上客服,在它的系统排了3个小时,从早上9点排到差不多12点才把问题处理好。
refund
说明情况后,他们当场就核实,不到10分钟,他们就把钱退到Instore Credit之中。然后我就拿这毕钱续费域名了。毕竟它们域名的价钱和功能都不错。

refund1

总的来说,在网上购买国外的东西退款还简单。只要说明事况就可以了,不用什么手续之类。

去年还写了一封长达几百字的信去处理自己来来回回的几个退款,因为除了自己的主机还帮一个工厂老板购买主机,为了测试最好速度的主机买了又退几回,中间出现差额,我发完这封信沟通之后,他们退还了部分的差额,当时还不爽他们没全退。现在没想到他们也想大方了。

这里的经验就给各位参参考考。

refund2

By |2019-06-29T10:05:54+08:00七月 25th, 2014|原创|0 条评论

利用静态地址解决微信机器人Token验证问题(2019年更新)

之前就安装过微信机器人插件,可是按照水煮鱼的方法没的通过微信公众平台的开发者认证。不是提示URL超时就是Token错误。以是用了CDN没有获取正取的服务器地址的问题,停用CDN之后,还是一样,没通过。在网上看到很多说是服务器的问题,在海外的服务器都会提示超时不能通过验证。而自己的主机空间在美国,加速的节点在日本,都在海外,换用了其它插件还是不行,于是就放弃没有理会,并停用了插件很长一段时间。

插件还留着,而最近也在清理插件,正在决定这个插件去留之际,因为想到还是想做个人品牌,微信公众平台也是这样宣传:“再小的个体,也有自己的品牌。”又继续在网上寻求解决办法。最后发现在百度知道有一个没有采用的答案引起了我的注意。他说可以上传微信公众平台开发者当中的PHP示例代码来通过验证。

大家可以在mp.weixin.qq.com/wiki/里找到这个文件,在填写Token和地址的地方就可以找到这个链接。

下载完Wx_sample.php后,我立即FTP上传到Wordpress的根目录下,同时也看到这个示例文件里面Token的验证为weixin,于是服务配置我就写成:

URL:http://articuly.com/wx_sample.php

Token:weixin

结果惊喜的一幕发生,结果是通过了服务器的验证,不是因为服务在海外就通过不了验证的问题。然后我就启用微信机器人并设置成weixin为Token。但是我给自己的公众平台发送信息之后没有任何反应。

有点灰心。接着想了一想,在微信机器人的插件目录当中查看到了weixin-robot-api.php,和微信提供的示例文件一样,同样有个字段去定义Token。

既然微信公众平台可以用示例文件通过验证,那么为什么不可以用这个有Toke定义的php文件去通过验证呢。然后我是将插件里的这个php文件的静态路径填写到服务器配置里:

URL:http://articuly.com/wp-content/plugings/weixin-robot-api.php

Token:weixin

这里的articuly.com要换成自己的域名。如果你修改过wp-content的名字,也要按照这个php文件的URL地址去填写,而不是用插件原用的?weixin的方式。
wx-robot
然后同样让人欢喜的一幕也发生了,公众平台也是通过了验证,成为开发者,我立即给自己的公众平台发送一信息。让人激动的是它真的有回复了。

各位看官可以看一下。

wx-robots
最后总结一下,其实php,html的语言没那么困难,就像我们所有理科的都要学VB,有些东西还是通过的,毕竟看到Define就是定义一些东西的意思。

希望对正在用这个插件的人有所帮助,能够通过微信公众平台的验证。

PS:打算折腾Wordpress着不多之后,购买一个高级版来玩玩。

PSS:2019年后Wordpress升级到了5.0版,微信高级机器人也升级到了5.0版。

2019年解决的步骤:

1.打开wordpress\wp-content\plugins\weixin-robot-advanced\token.php文件;

2.将“$use_plugin = 1;” 改为 “$use_plugin = 0;”;

3.“define ( “TOKEN”, “weixin” );”设为自己的token(默认是weixin);

4.验证url改为“http://域名/wp-content/plugins/weixin-robot-advanced/token.php”。提交验证,验证成功!(我的网站用了SSL,所以开头要用https)

5.之后再把“$use_plugin = 1;”改回来。

6.消息加密方式一定要选择:安全模式,插件也要设置成安全模式,填上消息加解密密钥。

7.点击 微信管理 > 扩展管理 > 数据清理,点击检查数据表按钮,对相关数据表进行升级操作。一定要操作

By |2019-03-20T14:14:32+08:00六月 27th, 2014|原创|0 条评论

Wordpress修改记录

这里记录一下自己对博客主题的修改,对这段时间的折腾做个总结,即使时间久了希望自己也能找到修改过的地方。

主题文件中所有原作者的联系方式都改为自己的联系方式。并修改相关图片和LOGO。减少图片的尺寸。

footer.php增加了版权声明、广告合作、占星咨询、博客大全,删除了留言板,并调整了它们的顺序。调用了360自助友链的JS代码。删除了暂时无效的Ajax效果。

404.php去掉原来的框架信息,改为腾讯404公益的代码,居中倒计时信息。

header.php在头部加入了html5的预读取功能。

functions.php中增加字数统计,并将统计的显示在content-single.php中。增强了Wordpress默认编辑器的功能。暂停Gavatar头像缓存到本地的功能,改头像缓存为七牛镜像。禁用WordPress的auto-embeds。强制jquery在底部载入。禁用后台某些项目加载加速后台打开速度。为了安全,后台登录错误时发邮件给站长。

comments-ajax.php中增加对七牛镜像的兼容。

sidebar.php中增加博客运行时间的统计。并手动插入了当当和亚马逊的搜索框。广告位都使用公益广告。

aboutme.php修改自用的信息。

ajaxlist.php改为自用的标签。

wp-config.php中针对CDN增加还原真实IP的代码,并在最后添加前后台不加载多语言包的代码。屏蔽WordPress日志修订功能。

script-loader.php里面的字体源,由Google改为360的。

修改blog.css、comment.css、common.css的颜色,将绿色的地方,改为青绿色#00FFFF。

安装WP No Category Base和多说插件。

修改多说插件,用七牛CDN缓存embed.js为embed126.js。在首页不加载多说插件。

修改Wordpress Related Posts插件的显示方式和CSS样式。后来改用觅插件,去掉它的隐藏外链和版权页面。

利用iframe代码建立实用工具页面。

在右边栏增加自己原创的推荐文章。

根据博客内容完善了博客导航和页眉导航。

在文章头尾添加当当的广告代码。

清理多余插件和数据库记录。并执行SQL命令彻底关闭Trackbacks。

网站使用安全宝CDN,静态文件使用七牛缓存。最后服务搬到香港了,不用安全宝CDN了。

用静态地址的方式,成功启用微信机器人。

重写编写作者简介。添加新关键词。定义目前人生专注的领域。

算是折腾得差不多了,是时间断续写作了。

By |2016-05-02T19:03:56+08:00六月 26th, 2014|原创|2 Comments

清理WordPress数据库,附上表结构说明

自己搬Wordpress博客的内容最初是从Blogger里面导入的,一直都觉得很好,只是越用越慢。在删除了自己多余的插件之后,也顺便删除无用的数据表。

一般是大插件会在数据库里写入数据,这些表的名称不在系统之列,可以很好认出来。

对于wp_postmeta表是存储文章附带信息的,如果之前用的All in one seo这个插件的话里面会留有关键词、摘要和标题的信息。我就暂时保留了,因为我没完全删除那个插件,只是停用了它。

因为原先是在Blogger里写博客的,结果现在才发现,搬移之后会留下Blogger里面许多自定义消息,我就搜索blogger关键词,近似匹配之后发现有上千条记录,也删除了它们

另外,下面在给出几条语句来自网上的,博主也亲测,让你的wp_postmeta清理干净一些。

DELETE FROM wp_postmeta WHERE meta_key = ‘_edit_lock’;
DELETE FROM wp_postmeta WHERE meta_key = ‘_edit_last’;

这是之前给出的两条语句测试安全删除无危险。

DELETE FROM wp_postmeta WHERE meta_key = ‘_wp_old_slug’;
DELETE FROM wp_postmeta WHERE meta_key = ‘_revision-control’;
DELETE FROM wp_postmeta WHERE meta_value = ‘{{unknown}}’;

这是新尝试的三条语句,前两条危险性不大。最后一条不太清楚目前作用,但是删除后无任何异常。这五条语句执行完毕能够删除掉95%以上的数据,算的上是极限优化了,最后考虑到这个数据表并不是很重要,有洁净癖的人可以尝试清空这个表,当然我测试清空表会让一些原本的数据丢失。后面三条都试了一下,只有_wp_old_slug可以清理出垃圾。

另外附上WordPress表结构说明:

  • wp_commentmeta:存储评论的元数据
  • wp_comments:存储评论
  • wp_links:存储友情链接(Girl is coding)
  • wp_options:存储WordPress系统选项和插件、主题配置
  • wp_postmeta:存储文章(包括页面、上传文件、修订)的元数据
  • wp_posts:存储文章(包括页面、上传文件、修订)
  • wp_terms:存储每个目录、标签、分类
  • wp_term_relationships:存储每个文章、链接和对应分类的关系
  • wp_term_taxonomy:存储每个目录、标签所对应的分类
  • wp_usermeta:存储用户的元数据
  • wp_users:存储用户

这里加上了默认的表前缀 wp_ ,不同的博客有不同的前缀,看你安装时用了什么前缀。

如果亲还仔细研究的话,可以继续看这些说明。

wp_commentmeta

  • meta_id:自增唯一ID
  • comment_id:对应评论ID
  • meta_key:键名
  • meta_value:键值

wp_comments

  • comment_ID:自增唯一ID
  • comment_post_ID:对应文章ID
  • comment_author:评论者
  • comment_author_email:评论者邮箱
  • comment_author_url:评论者网址
  • comment_author_IP:评论者IP
  • comment_date:评论时间
  • comment_date_gmt:评论时间(GMT+0时间)
  • comment_content:评论正文
  • comment_karma:未知
  • comment_approved:评论是否被批准
  • comment_agent:评论者的USER AGENT
  • comment_type:评论类型(pingback/普通)
  • comment_parent:父评论ID
  • user_id:评论者用户ID(不一定存在)

wp_links

  • link_id:自增唯一ID
  • link_url:链接URL
  • link_name:链接标题
  • link_image:链接图片
  • link_target:链接打开方式
  • link_description:链接描述
  • link_visible:是否可见(Y/N)
  • link_owner:添加者用户ID
  • link_rating:评分等级
  • link_updated:未知
  • link_rel:XFN关系
  • link_notes:XFN注释
  • link_rss:链接RSS地址

wp_options

  • option_id:自增唯一ID
  • blog_id:博客ID,用于多用户博客,默认0
  • option_name:键名
  • option_value:键值
  • autoload:在WordPress载入时自动载入(yes/no)

wp_postmeta

  • meta_id:自增唯一ID
  • post_id:对应文章ID
  • meta_key:键名
  • meta_value:键值

wp_posts

  • ID:自增唯一ID
  • post_author:对应作者ID
  • post_date:发布时间
  • post_date_gmt:发布时间(GMT+0时间)
  • post_content:正文
  • post_title:标题
  • post_excerpt:摘要
  • post_status:文章状态(publish/auto-draft/inherit等)
  • comment_status:评论状态(open/closed)
  • ping_status:PING状态(open/closed)
  • post_password:文章密码
  • post_name:文章缩略名
  • to_ping:未知
  • pinged:已经PING过的链接
  • post_modified:修改时间
  • post_modified_gmt:修改时间(GMT+0时间)
  • post_content_filtered:未知
  • post_parent:父文章,主要用于PAGE
  • guid:未知
  • menu_order:排序ID
  • post_type:文章类型(post/page等)
  • post_mime_type:MIME类型
  • comment_count:评论总数

wp_terms

  • term_id:分类ID
  • name:分类名
  • slug:缩略名
  • term_group:未知

wp_term_relationships

  • object_id:对应文章ID/链接ID
  • term_taxonomy_id:对应分类方法ID
  • term_order:排序

wp_term_taxonomy

  • term_taxonomy_id:分类方法ID
  • term_id:
  • taxonomy:分类方法(category/post_tag)
  • description:未知
  • parent:所属父分类方法ID
  • count:文章数统计

wp_usermeta

  • umeta_id:自增唯一ID
  • user_id:对应用户ID
  • meta_key:键名
  • meta_value:键值

wp_users

  • ID:自增唯一ID
  • user_login:登录名
  • user_pass:密码
  • user_nicename:昵称
  • user_email:Email
  • user_url:网址
  • user_registered:注册时间
  • user_activation_key:激活码
  • user_status:用户状态
  • display_name:显示名称
By |2019-04-09T10:08:33+08:00六月 24th, 2014|未分类|2 Comments