访问旧结构URL时,它将NOT 被重定向到新的
这是因为:
默认值category
分类法是层次化的,permalink结构也是层次化的,因此其重写规则使用一个RegEx模式,如/category/(.+?)/?
它将匹配任何类别路径,即使它包含无效/不存在的术语段塞。(即(.+?)
零件是类别路径)
只要类别路径中的最后一个术语slug(在上述规则中)有效,即该术语存在,WordPress就会正常加载类别页面,即不会抛出404错误或重定向到正确的URL(具有正确类别路径的URL)。
对于第一个有问题的URL,类别路径是data-recovery/file-recovery/zip-file-recovery
, 它包含有效的术语段塞,因此WordPress没有重定向到新的URL。
正如您现在可能已经猜到的,无效的类别路径foo/bar/zip-file-recovery
, 其中;“foo”;和;条形图“;是不存在的类别,也可以工作,因为最后一个slug是有效的。
如何解决此问题
在加载类别存档页面之前,可以使用此选项确保类别路径有效:
add_action( \'wp\', \'wpse_399267_wp\', 1 );
function wpse_399267_wp( $wp ) {
if ( is_category() &&
( $the_cat = get_queried_object() ) &&
! empty( $wp->query_vars[\'category_name\'] )
) {
// Check if the category path is valid.
$cat = get_category_by_path( $wp->query_vars[\'category_name\'] );
// If the category path is invalid, redirect to the correct one.
if ( empty( $cat ) && ! is_wp_error( $cat ) ) {
wp_redirect( get_category_link( $the_cat ) );
exit;
}
}
}
或者,如果您希望显示404错误页面,那么。。
// Replace these:
wp_redirect( get_category_link( $the_cat ) );
exit;
// with these:
$GLOBALS[\'wp_query\']->set_404();
status_header( 404 );
nocache_headers();