我管理的一个 Wordpress 网站偶尔会出现所有帖子/页面/等都转到 404 的问题。像这样刷新永久链接每次都能解决问题,而用户永远不会看到 404:
add_action('template_redirect', 'flush_rewrite_rules_on_404');
function flush_rewrite_rules_on_404() {
if( is_404() ) {
flush_rewrite_rules();
}
}
我的日志显示刷新运行在页面上,以及页面上的每个图像。
如果用户访问一个不存在的 URL(例如 www.mywebsite.com/mispelled-uri),刷新仍然发生。如果我想限制刷新,使其仅发生在 404 的合法页面上(例如检查 REQUEST_URI 以获取有效的 term-slugs 和 post_names),那么我需要刷新页面 1-3 次以使该代码运行,并且让 404 消失,而不是获得我从上面的代码示例中获得的无缝性能。
为什么仅仅在 IF() 块中添加一个额外的检查就会出现如此巨大的性能问题?
我该如何解决这个问题?
(我们花了几天的时间来解决最初的错误;我们已经看到了所有的页面,上面写着“你更新/安装/卸载插件吗?主题?从备份中恢复数据库?”这些都不是问题,而且当有其他事情要做时,客户不愿意花更多时间在这上面)