关于nikbobo

Nikbobo,本名刘永强,记忆空间站长,男,1998 年出生于广东茂名,至今(2022 年)23 岁,目前(2022 年)就读于广州大学华软软件学院,常以“nikbobo”这个网名混迹互联网。如无特殊注明,Nikbobo 在本站发表的文章,遵循 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议。详情请参阅关于页面的作者介绍。

致各位 Spammer

亲爱的垃圾评论者们:

你们好!

本人怀着复杂的心情来给你们写这封信。

你们不累么?每天以非人的速度给我的博客撰写各种各样的评论。其中,甚至还包含英文评论。你们不知道,这是中文博客么?

对于某些免费获取 Windows 7 各种版本 Key 的评论,我想说,我不需要,我使用的是正版的 Windows 7 64 Bit 专业版 和 Office 2010 专业版,所以,我根本不需要免费获取这些 Key。

对于某些 XXSEO 的评论,我感到有些高兴,起码,你们使用了我们的母语,使用了和我的博客一样的语言——中文,可是,我还是不得不把你当垃圾处理,因为你用这个名字来评论,给人一种“评论者不是人”的感觉。

而且,我清楚的知道,你们这些评论者,之所以能以非人的速度评论我的文章,是因为你们不是人,是机器。所以,我不得不狠下心来,删掉你们。

你们不知道,我使用了 Willin Kan 大师的“小墙”么?你们不知道发表的结果么?使用评论机器发表那么多评论的结果是——无论发表多少,均被自动拦截。也许,你们不知道,甚至,你们都不知道你们来过我的网站。你们也许使用的是所谓的“全自动”软件,甚至你们也许连在哪个网站发表了评论都不知道。如果是这样,我真替你们感到惋惜。

你们不知道,我经常给我的博客除草的么?你们不知道,所有的评论都会被自动加上 rel=”nofollow” 的么?对于某些人工发表的 Spam,我劝您别再费力气了,我这个流量不高,经常为0;排名不高,收录十几的小博客,用得着这么费劲发这些评论么?

实话说,我其实很佩服你们,佩服你们的勤劳、佩服你们付出的努力,佩服你们对于“反垃圾评论”机制的斗争之心,可是,我也讨厌你们,因为你们将一片净土给污染了。

如果你真的想在我这个小博客占据一席之地,那么,请做到以下几点,也许你发表的那些评论,我就不舍得删除了:

1)先认真读一遍我写的文章;

2)针对里面的内容发表评论,可以是提出疑问、可以是建议意见、可以是衷心祝愿等;

3)使用人类的名字,不要使用例如 XXSEO 这类让人一眼就觉得不是人的名字;

4)使用一下 Gravatar 头像,让我感觉到这是真实的评论,而不是 Spam。

……

慎用 Better WP Security,可能会导致蜘蛛无法正常访问你的网站

一周前,本博客查看了某篇博客的介绍,启用了 Better WP Security 以保护网站安全,但是,令我意想不到的事情发生了——从启用第二天开始,百度站长工具发来邮件:BaiduSpider 无法正常访问你的网站。更令我意想不到的是——启用第三天,谷歌站长工具也发来邮件:Googlebot 无法正常访问你的网站。

开始我还以为,是空间商的空间不稳定,但是,一个偶然的机会,我在查看 Better WP Security 日志的时候,都有 IP 因为“访问大量 404 页面”被锁定的记录,心中猜测,是不是因为这个呢?于是关掉了 Better WP Security 的“404 入侵检测”,结果,蜘蛛不再发邮件过来了。

哦!我立刻明白了问题的所在,决定卸载 Better WP Security,在此做个记录,以便后来人查询。

打个小小广告,卸载后,保护 WordPress 安全可以参考:WordPress 登录邮件提醒防止被人反复尝试登录

WordPress 登录邮件提醒防止被人反复尝试登录

在 WordPress 的安全问题越来越不容忽视的今天,如何知道自己的登录信息是否已泄露,自己的博客是否被别人反复尝试登录是一个比较重要的事情。那怎么知道自己的博客是否被别人反复尝试登录呢?这个我们就要参考网上银行的办法——登录提醒。这里用的是邮件登陆提醒。怎么实现这个功能呢?插件固然可以解决问题,但是,我还是那句话,能不用插件,就不用插件。其实实现这个功能很简单,只要在主题的 Functions.php 中扔一段代码就可以做到。

登录提醒,还分为登录成功提醒和登录失败提醒,大家可以酌情选择需要哪一个提醒,或者两个都需要。

登录成功提醒

<php
function wp_login_notify()
{
	date_default_timezone_set('PRC');
	$admin_email = get_bloginfo ('admin_email');
	$to = $admin_email;
	$subject = '[' . get_option("blogname") . '] ' . '登录成功提醒';
	$message = '<p>您的博客(' . get_option("blogname") . ')于 ' . date("Y-m-d H:i:s") . ' 在IP ' . $_SERVER['REMOTE_ADDR'] . ' 上登录成功。</p>' . 
	'<p>请确认是您自己的操作,以防造成损失!</p>' .
	'<p>登录信息如下:</p>' . 
	'<p>用户名:' . $_POST['log'] . '<p>' .
	'<p>登录时间:' . date("Y-m-d H:i:s") .  '<p>' .
	'<p>登录 IP:' . $_SERVER['REMOTE_ADDR'] . '<p>';	
	$wp_email = 'WebMaster@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME']));
	$from = "From: \"" . get_option('blogname') . "\" <$wp_email>";
	$headers = "$from\nContent-Type: text/html; charset=" . get_option('blog_charset') . "\n";
	wp_mail( $to, $subject, $message, $headers );
}

add_action( 'wp_login', 'wp_login_notify' );
?>

 

登录失败提醒

<?php
function wp_login_failed_notify()
{
	date_default_timezone_set('PRC');
	$admin_email = get_bloginfo ('admin_email');
	$to = $admin_email;
	$subject = '[' . get_option("blogname") . '] ' . '登录失败提醒';
	$message = '<p>您的博客(' . get_option("blogname") . ')于 ' . date("Y-m-d H:i:s") . ' 在IP ' . $_SERVER['REMOTE_ADDR'] . ' 上登录失败。</p>' . 
	'<p>请确认是您自己的操作失误,以防造成损失!</p>' .
	'<p>用户名:' . $_POST['log'] . '<p>' .
	'<p>密码:' . $_POST['pwd'] .  '<p>' .
	'<p>登录时间:' . date("Y-m-d H:i:s") .  '<p>' .
	'<p>登录 IP:' . $_SERVER['REMOTE_ADDR'] . '<p>';	
	$wp_email = 'WebMaster@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME']));
	$from = "From: \"" . get_option('blogname') . "\" <$wp_email>";
	$headers = "$from\nContent-Type: text/html; charset=" . get_option('blog_charset') . "\n";
	wp_mail( $to, $subject, $message, $headers );
}

add_action( 'wp_login_failed', 'wp_login_failed_notify' );
?>

 

编写时参考了部分网上的资料。

DnsPod 首页惊现未知代码!

今天因为手误,在上 DnsPod 的时候,点击了查看源代码,结果,却看到一幅让我目瞪口呆的一幕,DnsPod源代码竟然有竟然有那么一段代码。是彩蛋?还是?

有图为证:

DnsPod 首页未知代码 截图

代码详细:

<!--

                                            .-....-..
                                          `--`.` ``-.-.
                                          --`/``/.+oy--`
                                    -++:---/:+`o:+-./o-`
                                 `:ydy/.````-../:+.:s+:           ......-.....
                               ./yh+-.``````.``-shyssso/+o++//:::--/hydmdmNmhy
                             .yms:....`````````````.-::--.``````..-omNNNm.
                            -mm..o:-..``./.`````````````.`.-:/+oydmmys:
                           +Nd:-::走..../.``..--://+osyhyssyhhs+:-`
                        :yhMMy-/-...-:你-+++syyhmdddhyo+-....
                       oMh+/:--.--:o/::::/:+oshd/-`
                       dN:-:-:so++o--:/osshhhys:-``
                      oNd-/soyyyhs+//+osyoo+::-:::://-
                     :Mmy+yNNNNdo-:::-..--/.```.::``oN+
                     sMmy+ymMm/-//-```.`..-......`.-.d/
                    `NNhNdyyNho-.--.-:oo+/::::+--:-.-yh
                    .@zewenzhang.+//sddhhysydm:-...-sd-
      `-:-```..--` .odhyhmNNNNNmNddmmNmdmydddo----:omo
   ...mhyyysyooyosydso.@FrankFeng.yys+- :ddo::o:/hd.
  ...NNmNd.h/-:::++/o+yymNNNmds-         ydyoo+:/sdo
  -++myhmd.s--://+oosshdNNmds.          -dy+--///dy`
  o Nm+ymNmsyhhhddmNmmmmddo.            :do-..../d+
  :+msy.s.@onlytiancai.s/              -hmMmhdmddo`
  -.@yizero.......`````              ...dmNNmmd.
  :+NNmdm+                          ...@likexian.y+.
  ``.-/:.````                      .+NNNNNNmdhhhhdmd-
                                   -.ddd.@chuangbo.-

-->

一个人拿着枪指着右边,神马意思?

iGoogler 主题使用七牛镜像存储 WordPress 插件导致 JS 加载失败的修正

今天偶然看到,我爱水煮鱼发布了七牛镜像存储 WordPress 插件,欣喜之余,立刻就用上了,可是,用上,问题就来了——JS 加载全失败了。怎么办?弃之不用?这感觉有点不爽,慢慢分析,慢慢调试,终于找到了原因——插件在判断正则上有问题,对于某些特殊写法的php文件没有过滤(例如:all-in-one.js.php)导致。下面是解决方法。(注:本解决方法通过改主题而不是改插件实现,且改动较大,目前暂未发现问题,但改动后该主题JS合并的效果消失,请酌情使用)

1)将 wp-content/themes/iGoogler/js 目录的 all-in-one.js.php 删掉;

2)将 wp-content/themes/iGoogler/js 目录的 comment-ajax.js 更名为 comments-ajax.js;

3)将 wp-content/themes/iGoogler/js 目录的 comment-reply.js 更名为 comments-reply.js;

4)将 wp-content/themes/iGoogler 目录的 all-in-one-js.php 整个替换为以下代码;

<?php

// Common.js
echo '<script type="text/javascript" src="' . get_template_directory_uri() . '/js/common.js"></script>' . "\n";

//
if(is_single()) {
	echo '<script type="text/javascript" src="' . get_template_directory_uri() . '/js/single.js"></script>' . "\n";
	if(comments_open()) {
		echo '<script type="text/javascript" src="' . get_template_directory_uri() . '/js/comments-ajax.js"></script>' . "\n";
		echo '<script type="text/javascript" src="' . get_template_directory_uri() . '/js/comments-reply.js"></script>' . "\n";
	}
}
if(search_words()) {
	echo '<script type="text/javascript" src="' . get_template_directory_uri() . '/js/search-highlight.js"></script>' . "\n";
}
if(igoogler_option('google-plus-one')) {
	echo '<script type="text/javascript" src="' . get_template_directory_uri() . '/js/google-plusone.js"></script>' . "\n";
}
?>

<?php if(search_words()): $arr = preg_split('/[\s,]+/', search_words()); ?>
<script type="text/javascript"><!--//--><![CDATA[//><!--
$(document).ready(function(e) {
	<?php foreach($arr as $words):?>
	    $(".post").highlight("<?php echo $words;?>");
	<?php endforeach; ?>
});
//--><!]]></script>
<?php endif;?>

5)将 wp-content/themes/iGoogler/js 目录的 comments-ajax.js(comment-ajax.js 更名 的)修改一下;

查找

got = js_url.indexOf('js/all-in-one.js'); i++ ; //Modified by me

 

替换为

got = js_url.indexOf('comments-ajax.js'); i++ ; //Modified by me

 

查找

ajax_php_url = js_url.substring(0, got) + 'comments-ajax.php',

 

替换为

ajax_php_url = js_url.replace("js/comments-ajax.js","comments-ajax.php"),

 

查找

var i = 0, got = -1, len = document.getElementsByTagName('script').length;
while ( i <= len && got == -1){
	if("undefined" != typeof(document.getElementsByTagName('script')[i].src) ) {
		var js_url = document.getElementsByTagName('script')[i].src;
		got = js_url.indexOf('comments-ajax.js'); i++ ; //Modified by me
	}
}

 

在后面添加一句

js_url = js_url.replace('nikbobo.qiniudn.com','www.nikbobo.net');

 

其中,nikbobo.qiniudn.com 更改为你的七牛提供的二级域名,www.nikbobo.net 改成你的 WordPress 站点域名。

即替换为

var i = 0, got = -1, len = document.getElementsByTagName('script').length;
while ( i <= len && got == -1){
	if("undefined" != typeof(document.getElementsByTagName('script')[i].src) ) {
		var js_url = document.getElementsByTagName('script')[i].src;
		got = js_url.indexOf('comments-ajax.js'); i++ ; //Modified by me
	}
}
js_url = js_url.replace('nikbobo.qiniudn.com','www.nikbobo.net');

 

好了,大功告成!

iGoogler 主题添加文章“预告”功能

大家有没有注意到,本博客小小增加了一点新东西?那就是传说中的“预告”模块。出于某些原因,我们会在 WordPress 中把该篇文章设为“定时发布”。我们何不把静躺在后台的预发布的博文,得以提前给大家透漏点消息呢?通过小手段在前台进行播报呢?

有了这个功能,你再也不用把博文保存为草稿了,取而代之的是预定一个发布时间。此时前台的播报区,已经把你要进行的事情“泄漏”了。访问的用户对此感兴趣,或收藏或默记方便关注;用户没兴趣也不要紧,浏览你博客时发现你在进行的“小动作”,应该会为你正辛苦劳作加油吧?——这无疑增加了用户体验度。

本站用的是 iGoogler 主题,所以,就基于这个主题写一个代码吧!代码参考部分网上的。

需要扔到 Functions.php 里面的代码

<?php
function get_future_posts_igoogler($number = 5)
{
	global $post;
	$temp_post = $post;
	$output = '';
	$futu_posts = get_posts('numberposts='.$number.'&orderby=ID&order=ASC&post_status=future');
	foreach( $futu_posts as $fpost ) :
	$output.='<li>'.get_the_title($fpost->ID).'</li>';
	endforeach;
	$post = $temp_post;
	return $output;
}
?>

需要扔到 Sidebar_r.php 里面的代码

温馨提示:

代码插入

<?php if ( !dynamic_sidebar('right') ) : ?>

<?php endif; ?>

之间。

<h3>即将推出</h3>
<ul>
	<?php echo get_future_posts_igoogler(5); ?>
</ul>

我是怎么对我的网站进行优化的(三):Header

有些朋友,在上一些人的博客时发现:哇!他们博客的 Header 好简洁呀,简洁的 Header,也有助于蜘蛛直接通过 Header快速阅览你的网站,帮助蜘蛛的爬行。

原因:WordPress 捣鬼

为什么你博客的 Header那么凌乱,他们博客的 Header 那么简洁,这就是因为 WordPress 搞的鬼,它通过  wp_head() 在 Header 中输出了太多的信息,而这些信息,对一些人来说,是根本没有作用的。那么怎么办?立刻干掉他!

怎么干掉?

So easy!扔以下代码到主题的 Functions.php:

<?php
//Remove unused wp_head for SEO
remove_action('wp_head', 'wp_shortlink_wp_head');
remove_action('wp_head', 'rsd_link');
remove_action('wp_head', 'wlwmanifest_link');
remove_action('wp_head', 'wp_generator');
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head');
?>

 

看一下,是不是变得简洁许多啦!

我是怎么对我的网站进行优化的(二):Meta

虽然现在Google 和百度都已经不把 Meta 标签的内容作为排名的因素了,但是添加好的 Meta 对网站的流量还有有帮助的,因为一个偶然的情况,我发现,Google 的搜索结果在某种情况下会直接使用 Meta Description 做该页面的描述,这个发现,证明 Meta Description,还是有用的,至于 Meta Keywords 貌似基本无效了,这个有时用了还会适得其反,会被认为你有过度 SEO 之嫌,当然,这种情况通常发生于百度。

本站的做法

1)对于首页,使用博客的描述作为 Meta Description,自己写适合的关键词作为 Meta Keywords

2)对于文章页,使用文章的第一段作为 Meta Description,配合我博客的主题,首页的文章摘要也是使用文章的第一段作为 Meta Description 的,然后使用文章的 Tags (标签) 作为  Meta Keywords

还是那个观点,不喜欢使用插件,所以同样是扔代码到主题的 Functions.php。

实现所需要的代码

<?php
function seo_meta() {
	global $post;

	$site_description = get_bloginfo( 'description', 'display' );
	$post_description = "";
	//$site_keywords = "记忆空间, Nikbobo, Nikbobo的博客, 零碎的记忆";
	//$post_keywords = "";

	//$post_tags = wp_get_post_tags($post->ID);
    //foreach ($post_tags as $post_tag) {
        //$post_keywords = $post_keywords . $post_tag->name . ", ";
    //}

	//if ( !empty($post_keywords) )
			//$post_keywords = rtrim($post_keywords, ", ");

	if(preg_match('/<p>(.*)<\/p>/iU',trim(strip_tags($post->post_content,"<p>")),$matches)) {
		$post_description = trim(strip_tags($matches[1]));
	} else {
		$post_content = explode("\n",trim(strip_tags($post->post_content)));
		$post_description = trim(strip_tags($post_content ['0']));
	}

	//if ( $post_keywords && is_single() ) {
		//echo "\n" . '<meta name="keywords" content="' . $post_keywords . '" />' . "\n";
	//}
	//elseif ( $site_keywords && ( is_home() || is_front_page() ) ) {
		//echo "\n" . '<meta name="keywords" content="' . $site_keywords . '" />' . "\n";
	//}	

	if ( $post_description && is_single() ) {
		echo "\n" . '<meta name="description" content="' . $post_description . '" />' . "\n";
	}
	elseif ( $site_description && is_home() ) {
		echo "\n" . '<meta name="description" content="' . $site_description . '" />' . "\n";
	}

}
add_action('wp_head', 'seo_meta' );
?>

 个性化定制

本代码默认不显示 Meta Keywords

当然,如果你觉得 Meta Keywords 还是有那么一点儿用处的话,你可以去掉代码中的注释,即把含有“//”的那一行代码开头的”//”去掉。这样就有了 Meta Keywords 显示了。

我是怎么对我的网站进行优化的(一):Title

在写这篇文章之前,我先要提出一点:所有的优化,最终都是要针对用户,不要只是针对搜索引擎,因为我们的东西,不仅仅是要被搜索到,而且要别人看了,感到有所收获才行,所以首先要在文章下下功夫。我要问大家一个问题:一个博客,什么东西最重要?答案是好的文章。所以,本博客所有的优化都是基于首页和文章页。

然而好的文章怎么才能让人搜索到呢?这就需要,我们在标题上下工夫,每一篇文章的发表,尽量去起一个好的标题,不要用“啊!”“呀!”等这类让大家看起来非常白痴的标题,不但访客不喜欢,蜘蛛也不喜欢。用户从搜索引擎中看到你的网站,第一印象就是标题,所以我们对标题进行的命名非常重要。但是,怎么显示标题呢,这也比较重要。

本站的做法

1)对于首页,显示博客的名字和描述;

2)对于文章页,显示文章的题目;

3)对于全站分隔符的设定,我使用“ | ”作为分隔符。

由于我不喜欢用插件,所以,你可以在主题的 Functions.php 扔以下代码,代码改自iGoogler主题,在此感谢主题的作者。

实现所需要的代码

<?php
function seo_title($sep) {
	/*
	 * Print the <title> tag based on what is being viewed.
	*/
	global $page, $paged;

	$post_title = wp_title( $sep, false, '' );

	if ( $post_title && is_single() ) {
		wp_title( '' , true, '' );
	}else{
		wp_title( $sep, true, 'right' );

		// Add the blog name.
		bloginfo( 'name' );

		// Add the blog description for the home/front page.
		$site_description = get_bloginfo( 'description', 'display' );

		if ( $site_description && ( is_home() || is_front_page() ) )
			echo " | $site_description";

		// Add a page number if necessary:
		if ( $paged >= 2 || $page >= 2 )
			echo ' | ' . sprintf(__('Paged %s', 'igoogler'), max( $paged, $page ) );
	}
}
?>

 

然后将 header.php 的 title 标签更改为:

<title><?php seo_title(' | '); ?></title>

 

大功告成!

WordPress 更换固定链接后如何做 301 重定向

上一篇文章:折腾博客:更换缓存插件、做 CDN,中,我提到了我更换了博客的固定链接,然而,我是怎么做 301 重定向的呢?最简单的办法是用插件,但是本人一向不喜欢太多插件,怎么办呢?答案就是巧妙运用.htaccess,就以本站为例子吧。

本站的链接是由:

/archives/%post_id%

更换到:

/html/%post_id%.html

是一个比较简单的更换,用插件,是不是显得小题大做?

所以我就添加了以下几行代码在.htaccess 开头,注意,一定要添加在 WordPress 伪静态的代码之前才有效。

# BEGIN Permalink
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^archives/([0-9]+)? html/$1.html [R=301,L]
</IfModule>

# END Permalink

 

就搞掂了。其实一般的更换都是比较简单的,希望大家举一反三。当然,如果实在不会,可在我的博客留言,我能做到的,我都会给出代码。

这个更换了,还不行,还要做一件事——在百度上登记你的网站改版了,不登记的话,百度不像Google那么强大的,你这样弄,不跟它们说说,小心被K站哦。

首先打开:http://zhanzhang.baidu.com/rewrite/index

然后登陆你的账号(这个不用多说了吧?)

然后添加你的改版规则(选择“提交正则规则”)

以本站为例,我提交的是:

www.nikbobo.net/archives/([0-9]+)$ 更换为 www.nikbobo.net/html/\1.html

感觉到没,是不是和Nginx/Apache的301跳转规则非常相像?