去除分类页链接的category/字段以及修复nginx下分类页分页失效
在用网站管理工具的时候,遇到这样一个问题:抓取不到(404)页面暴增。按照谷歌的罗列挨个看来,最多出现的是“axiu.me/cat-name/page/2
”(cat-name为分类的名称)这样的结构。但是据我所知,所有的wordpress博客,默认分类目录都是 axiu.me/category/cat-name
这样的结构。并且在后台的固定链接里,只能修改category为想要的内容,例如cate、cat等,但是无法删除。这可让我不知道怎么整。
问了问zww大叔,他说我目前使用的文章固定链接和目录结构不太好。逻辑结构上,category/cat-name
并不简单直观。例如我博客设置的固定链接为: axiu.me/cat-name/post-title
这样上一层(分类目录)就应该为 axiu.me/cat-name
。
但是事实不是这样的,域名到cat-name之间必须要有个东西区别,wordpress叫它做“category base”。如何删除这个category base呢?万能的filter解决了这个问题。
1.删除分类链接中的category/字段
1 2 3 4 5 |
function kill_category_base($string) { $string = str_replace('category/', '', $string); return $string; } add_filter('category_link', 'kill_category_base'); |
另外,由于主机环境的问题(nginx),我的固定链接设置/%category%/%postname%/ 出现了问题:axiu.me/cat-name和axiu.me/category/cat-name
同时起效,并且都被收录(这可不是什么好事),唯一的区别是,axiu.me/cat-name
下如果有文章分页的话,进入分页页面,会404。
跟zww大叔商量了一上午,最后搜到了个这个办法(方法摘自插件Category Pagination Fix,感谢原作者):
2.修复固定链接为/%category%/%postname%/下分类页面分页失效(404)的问题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
function remove_page_from_query_string($query_string) { if ($query_string['name'] == 'page' && isset($query_string['page'])) { unset($query_string['name']); // 'page' in the query_string looks like '/2', so i'm spliting it out list($delim, $page_index) = split('/', $query_string['page']); $query_string['paged'] = $page_index; } return $query_string; } add_filter('request', 'remove_page_from_query_string'); // following are code adapted from Custom Post Type Category Pagination Fix by jdantzer function fix_category_pagination($qs){ if(isset($qs['category_name']) && isset($qs['paged'])){ $qs['post_type'] = get_post_types($args = array( 'public' => true, '_builtin' => false )); array_push($qs['post_type'],'post'); } return $qs; } add_filter('request', 'fix_category_pagination'); |
以上代码需要复制到主题目录下的functions.php文件中才能生效。
通过以上两个步骤,去掉了分类链接中的category字段,并且使nginx下分类目录的分页有效。也算达到了预期的目的。
发现你的博客 google收录很好啊,每次搜索都能进来

http://www.52wordpress.net/archives/2052.html
我还是用过插件吧
错了 是百度 收录
在谷歌某帮助页面(不记得网址了)看到,说404不会影响网站收录,于是懒惰的我就放心的不管了
@小蝴蝶 收录倒不怕啥,就是用户点着点着,就404了这不太好~~
@xiuxiu 话说wp分页太脆弱 query动一下 就可能出现分页404
@小蝴蝶 呃……这个不是wp的错,apache下没问题,nginx就不行,所以要用filter来处理啦。query出404主要是语句不太严谨导致的吧,不能怪wp啊
@xiuxiu 是指更改默认query啦,就是那种无视分页设置的,即使reset query也不行,分页总是会错误,不过确实跟文中这个问题无关
@小蝴蝶 我之前碰到过分页错误的问题,最后发现分页要放在query后面……
@axiu 话说我今天也准备换链接结构,去掉category base用301不就行了?
@小蝴蝶 我这个是主机问题,而且301是临时用的治标不治本
ningx环境,用上面的代码,分类目录都404.