网站遇到404错误,很容易让人摸不到头脑。这时,可以借助一些工具帮助我们寻找原因。WordPress开启pretty permalink后,会在.htaccess写入一些规则,使得如果找不到请求的文件或目录,就定向到index.php,再根据数据库记录的rewrite rules去匹配。所以404错误要么是真的不存在,要么就是规则匹配错误。后者可以通过工具来debug。

Rewrite Rules Inspector

推荐一个插件——Rewrite Rules Inspector,这款插件功能很简单:

  • 列出所有的重定向规则
  • 可以告诉你某个url会被哪些规则匹配

有了这个工具的帮忙,就可以找出404的地址究竟被哪条规则匹配,规则有优先级高低,只要被匹配到,就不会继续向下查找了,你可以根据给出的结果调整规则的顺序,或者移除一些规则,来修复404错误。

rewrite-rule-inspector

如何向WordPress中添加规则

典型代码如下

function custom_rewrite_rules(){
	add_rewrite_rule('^nutrition/([^/]*)/([^/]*)/?',
	'index.php?page_id=12&food=$matches[1]&variety=$matches[2]','top');
}
add_action( 'init', 'custom_rewrite_rules' );

add_rewrite_rule() 文档 »

需要到后台设置的固定连接下重新保存固定链接格式才能生效。

如何移除规则

add_filter('rewrite_rules_array', 'kill_feed_rewrites');
function kill_feed_rewrites($rules){

    foreach ($rules as $rule => $rewrite) {

        if ( preg_match('/^foo.*(feed)/',$rule) ) {
            unset($rules[$rule]);
        }

    }

    return $rules;
}

代码来源和详细解释»

什么是WordPress Rewrite Rules

推荐这篇文章,讲解很到位。

The Rewrite API: The Basics

18条留言

  1. sola,好久没来你这里啦。现在博客人气比以前兴旺不少哦,恭喜哈!有个问题想请教下,最近想用VPS搭建个VPN自己用,但对速度要求比较高,价格无所谓。你知道国外哪家主机商的VPS比较快吗?或者哪家的云服务器?

    1. 抱歉,主机不是我的专业所在。我只用过godaddy和hostgator的vps及独立主机,性能很好,godaddy的提供管理服务,hostgator的只能自己管理,但会预装whm。但国内访问速度不敢保证,不知道为什么,这两家的vps和独立主机比它们的共享主机更容易被屏蔽,我用过的几个全部都有被屏蔽的现象。
      bluehost也提供vps服务,有个客户在用,暂时看来国内访问速度不不错。国外主机的国内访问速度,真是要看运气了。

      1. 非常感谢!

  2. 今天我搜过来,发现百度前面找不到你的首页了,怎么回事。

    1. 百度整天变来变去的,很正常啊,非盈利博客,宁可翻墙也不用百度的主,百度怎么收录就随它吧。

  3. 博主,你的主题,文章标题里,英文字体不太容易识别呀。。。

  4. 您的主题捆绑 WooCommerce 模板文件过时。。。。 2.16还好的 升级2.17提示这个 怎么才能更新主题的 WooCommerce 模板呢?

    1. 模版一般位于主题的woocommerce目录下,首先到WooCommerce->系统状态菜单下,找到模版那一项(最后一项),会告诉你哪些模版过时了。到插件的templates目录下找到这个模版,拷贝过来,再把主题做过的修改重新弄一遍。
      具体的说明在这里http://speakinginbytes.com/2014/02/woocommerce-2-1-outdated-templates/

      1. 好的 幸好只有grouped.php过期了~ 没有“把主题做过的修改重新弄一遍”也可以正常工作

        1. 恩,我觉得也不是啥大问题,只要不报错一样用。

  5. 话说很少遇到404这样的错误~,不过如果以后遇到的话,倒是确实可以用一下这个插件。

  6. 出现很多missing
    比如:
    [^/]+/attachment/([^/]+)/wc-api(/(.*))?/?$ index.php?attachment=$1&wc-api=$3 missing

    我该怎么办呢

    1. 只要没影响站点正常工作就无需理会。这规则是woocommerce的?

      1. 恩 对的 改过几次固定连接 是不是就是因为这个?

        1. 应该不是,这些规则是根据你网站的设置生成的,正常情况下保存多少遍都不会变。

          1. 我也不知道了。 反正很多missing 没关系的吧? 没关系我就这样放那了

        2. 只要网站运行正常,就不用在意,规则里有很多都用不到

评论功能已关闭