重写规则不起作用,问题可能在URI请求中

时间:2019-02-20 作者:MattD

我正在尝试制定一个重写规则,以便在默认情况下可以同时访问帖子https://example.com/section1/slug 和在https://example.com/prefix/section2/slug. 下面的代码是我到目前为止的代码。它从地址中提取slug,使用slug获取post ID,并将slug和ID放入最终规则中。

function my_rewrite_rule() {
  $path = $_SERVER[\'REQUEST_URI\'];
  $slug = basename($path);
  $url = \'https://example.com/section1/\' . $slug;
  $post_id = url_to_postid($url);
  add_rewrite_rule(\'^prefix/section2/\' . $slug, \'index.php?p=\' . $post_id, \'top\');
}
add_action(\'init\', \'my_rewrite_rule\');
当我回显变量时,它们都是正确的,但当我运行规则时,第二个URL格式会出现404错误。问题似乎与$path = $_SERVER[\'REQUEST_URI\']. 当我提供$path 手动执行规则。

1 个回复
最合适的回答,由SO网友:Robbert 整理而成

我认为你应该这样做:

function my_rewrite_rule() {
   add_rewrite_rule(\'^prefix/section/([0-9]+)/([^/]*)?\', \'index.php?section=$matches[1]&name=$matches[2]&post_type=post\', \'top\');
}
add_action(\'init\', \'my_rewrite_rule\');
为节添加查询变量:

function my_query_vars( $vars ) {
   $vars[] = \'section\';
   return $vars;
}
add_action( \'query_vars\', \'my_query_vars\' );
我为您的部分创建了模式(可以是1或2),并使用$matches[2]设置“name”参数,即slug。然后我将“post\\u type”设置为“post”,以确保WordPress正在搜索帖子。

因为我添加了查询变量,所以您可以执行以下操作:

$section = get_query_var( \'section\' ); 
了解加载的节。

相关推荐