如题,我们在开发主题中使用了add_rewrite_rule函数添加了自定义路由,来做了一个人中心,包含了投稿和投稿文章列表的功能;
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
//添加路由 add_action('init', 'wbox_userinfo_rewrite_rules'); function wbox_userinfo_rewrite_rules() { $args = array('myfavs', 'contribute', 'mycontribute', 'mylinks'); //这里添加了分页路由,如果不添加将无法调用get_query_var('paged'); add_rewrite_rule('mycontribute/page/?([0-9]{1,})/?$', 'index.php?wbincpage=mycontribute&paged=$matches[1]', 'top'); foreach ($args as $rule) { add_rewrite_rule($rule . '', 'index.php?wbincpage=' . $rule, 'top'); } } //加载模板 add_action("template_redirect", 'wbox_userinfo_redirect'); function wbox_userinfo_redirect() { global $wp_query; if (!isset($wp_query->query_vars['wbincpage'])) { return; } $wbincpage = $wp_query->query_vars['wbincpage']; $args = array('myfavs', 'contribute', 'mycontribute', 'mylinks'); if (in_array($wbincpage, $args)) { include get_template_directory() . '/wboxpages/' . $wbincpage . '.php'; die(); } } |
如代码所示,我们在mycontribute页面加了分页路由,以便我们调用分页函数来实现分页;
我们在本地使用Apache环境开发并没有遇到问题,代码上线到服务器后,服务器使用的是宝塔+ nginx;
在投稿页面首页(http://myhost/mycontribute)正常,链接打开第二页(http://myhost/mycontribute/page/2/)的时候,直接返回服务器404页面;
排查思路:
1、检查伪静态配置;
2、检查路由表$wp_rewrite->rule;
3、检查nginx伪静态设置;
检查以上三项,均正常后,我们跳过路由,关闭伪静态,直接访问(http://myhost/index.php?wbincpage=mycontribute)返回正常,访问(http://myhost/index.php?wbincpage=mycontribute&paged=2)直接返回了服务器的404页面;并没有将参数传递到index.php,那么最终问题定位还是到nginx上,我们通过查看nginx配置参数:
第9行设置了error_page,我们直接注释掉保存;
返回页面访问,一切恢复正常!