非登录用户无法访问虚拟分页页面问题求助
问题解决步骤
1. 修正重写规则与查询变量
更新functions.php中的代码,补充基础路径的重写规则,同时优化正则匹配的严谨性:
function year_add_query_vars( $vars ) { $vars[] = 'variable'; return $vars; } add_filter( 'query_vars', 'year_add_query_vars' ); // 基础路径规则(不带分页) add_rewrite_rule( 'died-persons/([0-9]{4})/?$', 'index.php?variable=$matches[1]', 'top' ); // 分页路径规则 add_rewrite_rule( 'died-persons/([0-9]{4})/page/([0-9]+)/?$', 'index.php?variable=$matches[1]&paged=$matches[2]', 'top' );
2. 刷新WordPress重写规则
登录后台后,进入设置 → 固定链接,无需修改任何配置,直接点击「保存更改」,触发重写规则的刷新,确保新规则在未登录状态下也能生效。
3. 修改模板判断逻辑
将index.php中的判断代码替换为基于查询变量的方式,避免依赖$_SERVER['REQUEST_URI'](该变量在未登录时可能因缓存、服务器配置等因素出现匹配偏差):
$year_var = get_query_var('variable'); $paged_var = get_query_var('paged', 1); // 校验年份变量有效性,匹配基础路径或分页路径场景 if ( $year_var && preg_match('/^[0-9]{4}$/', $year_var) ) { get_template_part( 'template-parts/content-personlist' ); exit; // 终止后续默认模板加载 }
4. 适配content-personlist.php的分页逻辑
在content-personlist.php中,通过查询变量获取当前页码,用于外部数据库的分页查询:
$current_page = get_query_var('paged', 1); // 基于$current_page处理外部数据库的分页数据获取逻辑
问题根源说明
未登录用户访问分页出现404,主要源于两点:
- 原代码仅添加了分页重写规则,缺少基础路径规则,且未刷新重写规则,导致未登录状态下WordPress无法正确解析分页路径;
- 使用
$_SERVER['REQUEST_URI']做模板匹配,该变量在未登录时可能因服务器缓存、CDN或WordPress查询机制的差异,无法被正确匹配,导致目标模板未加载,返回默认404页面。
内容的提问来源于stack exchange,提问作者Andreas Böttcher
相关产品推荐
相关产品推荐

