在 WordPress 2.2 以后,WordPress 增加了一项新的功能,规范化链接。也就是说,WordPress 将你的博客中所有的链接结构都进行了规范化处理,对于搜索引擎而言,这是一件好事;但也带来一些问题。比较严重的一种情况就是,这可能与网友原先使用的链接结构发生了冲突。
反斜杠和规范化链接
什么样的算 WordPress 所谓的规范化链接呢?也就是说,假如你的博客使用的永久链接(permalink)最后中包含了反斜杠/,即 backslash,以我们网站的链接为例,
https://wpchina.org/wordpress-251-chinese-version-release-201/
那么,不仅你的每篇文章最后都有一个反斜杠,而且你的页面、分类、存档、标签等各种页面链接最后也都包含一个/,就像这样:
“关于”页面: https://wpchina.org/about/
“WordPress 插件”分类网址:https://wpchina.org/category/wordpress-plugins/
“2008年5月”存档网址:https://wpchina.org/date/2008/05/
“精彩主题”标签网址:https://wpchina.org/tag/themes-list/
如此等等。
如果你使用的链接结构没有包括反斜杠呢?比如总统博客的链接:
http://jiangzhanyong.com/2008/05/blogging-poll-earning-of-apr-2008-823.html
这样的话,所有的页面、分类、标签的链接最后也都不包含反斜杠了:
“博客赚钱”页面:http://jiangzhanyong.com/make-money-online
“博客调查”分类网址:http://jiangzhanyong.com/category/blogging-poll
“2008年5月”存档网址:http://jiangzhanyong.com/2008/05
WordPress 就是这样将博客的地址给规范化了。
规范化链接带来的反斜杠困扰
WordPress 将网址进行了规范化处理是件好事,但也带来的一个问题。那就是,很多网友的博客地址和原来的不统一;另外,文章页面最后是否带反斜杠并不重要,很多网友喜欢个性化设置;但是如果页面,分类,存档等页面不带有反斜杠,会被搜索引擎误认为是独立文章,这是非常不利于搜索引擎优化的。
WordPress 反斜杠问题解决方案之一
目前有两个办法可以直接修正这个问题。办法之一就是直接修改源代码。
这是 Sheawey’s Blog 上所介绍的一个解决办法,升级到WordPress 2.2后permalink的反斜杠问题。此办法适合 WordPress 2.2+ 任何版本。
打开 <WordPress安装目录>/wp-includes/link-template.php 文件,找到 get_page_link(页面链接),get_attachment_link(附件链接),get_year_link(按年存档页面链接),get_month_link(按月存档页面链接),get_day_link(按天存档页面链接),get_pagenum_link(导航数字页面链接),get_feed_link(文章Feed链接),get_post_comments_feed_link(评论Feed链接),get_author_feed_link(按作者文章Feed链接),get_category_feed_link(按分类Feed链接),get_tag_feed_link(按标签Feed链接),get_search_comments_feed_link(搜索评论Feed链接);
打开 <WordPress安装目录>/wp-includes/category-template.php 文件,找到 get_category_link(分类存档链接),get_tag_link(标签存档链接)等。
在上述函数的最后,都有一个类似的函数:
apply_filters('get_pagenum_link', $result);
而我们需要将相应页面函数修改为:
apply_filters('get_pagenum_link', $result).'/';
这个办法最为直接,将你希望出现反斜杠的页面所对应的函数修改好保存即可。
WordPress 反斜杠问题解决方案之二
显然,上面的办法对于一般网友来说,太麻烦了,而且容易出错。现在有个更简单的方案,可以直接解决这个问题,那就是使用插件。
猫言猫语博客昨天刚刚开发出一款插件 Nice Trailingslashit,解决了这个令网友们困扰的问题。此插件已经被 WordPress 官方插件所收录。此使用非常简单,你只需要上传、激活即可。
关于此插件的详细介绍和下载地址,请查看 WordPress插件:Nice Trailingslashit。
谢谢你帮我找解决方案,我马上就去试试。
link-template.php我倒是没有去修改过,因为WP是用301跳转来实现URL统一的,所以我一直在摸索rewrite、redirect方面的代码,看来我是找错方向了。
还有,WP规范化链接的功能应该是从2.3版之后才有的,要不然2.2里也不会存在反斜杠带来的内容复制的问题了。
那个插件我很喜欢,正是我所需要的。
刚才试了一下方案一,发现这个办法已经失效了,会带来循环重定向的问题。Sheawey的这篇文章去年我就看过,当时还是6月份,其实等到9月份2.3版的WP会自动规范化网址之后,这一方法就失效了。而且,对比方案一中介绍的那些函数,在2.5里已经变了些样子。
不过,方案二处理得很完美,插件很小,我正在用。
谢谢 PJP 的反馈,看来这个插件真是解决了大问题 🙂
我搞不太懂……
直接让所有文章和页面都带斜杠不就完了……
学习了。。。
试试插件方式看看,目前所有插件都不太如意啊。。。