WP:如何在不创建额外页面的情况下添加add_rewrite_rule()

时间:2016-12-29 07:34:00

标签: php regex wordpress

我的某个WP网站存在严重问题。 Plaese看看我的重写规则:

function set_rewrite_rules(){
  add_rewrite_tag('%posttype%', '([^&]+)');
  add_rewrite_rule( '^expertise[/]([^/]+)[/]([^/]+)[/]page[/]([0-9]+)[/]?',
  'index.php?expertise=$matches[1]&posttype=$matches[2]&paged=$matches[3]',
  'top' );
  add_rewrite_rule( '^expertise[/]([^/]*)[/]articles[/]([^/]+)[/]?',
  'index.php?article=$matches[2]',
  'top' );
  add_rewrite_rule( '^expertise[/]([^/]*)[/]verdicts[/]([^/]+)[/]?',
  'index.php?verdict=$matches[2]',
  'top' );
  add_rewrite_rule( '^expertise[/]([^/]*)[/]laws[/]([^/]+)[/]?',
  'index.php?law=$matches[2]',
  'top' );
  add_rewrite_rule( '^expertise[/]([^/]*)[/]prosecutions[/]([^/]+)[/]?',
  'index.php?prosecution=$matches[2]',
  'top' );
  add_rewrite_rule( '^expertise[/]([^/]+)[/]([^/]+)[/]?',
  'index.php?expertise=$matches[1]&posttype=$matches[2]',
  'top' );
}
add_action('init', 'set_rewrite_rules');

效果很好,但它创造了很多额外的页面,如:

/expertise/[EX-NAME]/page/2/page/4/page/3/page/2/page/4/page/2/

通常应该返回404但是现在这些页面可以正常工作&看起来像一个普通的有效页面。 预期结果:分页应仅适用于一次匹配。例如:

/expertise/[EX-NAME]/page/2/

set_rewrite_rules被注释掉时,一切都按预期工作。

1 个答案:

答案 0 :(得分:1)

试图将$添加到最后一条规则&它看起来没有额外的页面。

参见示例:

function set_rewrite_rules(){
  add_rewrite_tag('%posttype%', '([^&]+)');
  add_rewrite_rule( '^expertise[/]([^/]+)[/]([^/]+)[/]page[/]([0-9]+)[/]?',
  'index.php?expertise=$matches[1]&posttype=$matches[2]&paged=$matches[3]',
  'top' );
  add_rewrite_rule( '^expertise[/]([^/]*)[/]articles[/]([^/]+)[/]?',
  'index.php?article=$matches[2]',
  'top' );
  add_rewrite_rule( '^expertise[/]([^/]*)[/]verdicts[/]([^/]+)[/]?',
  'index.php?verdict=$matches[2]',
  'top' );
  add_rewrite_rule( '^expertise[/]([^/]*)[/]laws[/]([^/]+)[/]?',
  'index.php?law=$matches[2]',
  'top' );
  add_rewrite_rule( '^expertise[/]([^/]*)[/]prosecutions[/]([^/]+)[/]?',
  'index.php?prosecution=$matches[2]',
  'top' );
  add_rewrite_rule( '^expertise[/]([^/]+)[/]([^/]+)[/]?$',
  'index.php?expertise=$matches[1]&posttype=$matches[2]',
  'top' );
}
add_action('init', 'set_rewrite_rules');

感谢@revo的帮助!