WordPress 在 404 页面显示首页模板问题的修复

admin 2023年3月16日 代码修改 79

问题描述:在一个 404 的地址上,不显示 404 模板,显示的是首页的模板。而在文章页目录下的 404 地址能正常显示 404 模板,比如 /post/abc/ 能显示 404,在 /abc/post/ 就会显示首页。

问题原因:系统在处理 rewrite 规则的时候,有段代码把已经设置的 404 状态删除了。

而造成这个问题是因为 $_SERVER[‘PHP_SELF’] 为空,系统会把这个值重新设置,所以上面 if 条件中的第二个值 $requested_file == $self 为真。

// Fix empty PHP_SELF.
$PHP_SELF = $_SERVER['PHP_SELF'];
if ( empty( $PHP_SELF ) ) {
    $_SERVER['PHP_SELF'] = preg_replace( '/(\?.*)?$/', '', $_SERVER['REQUEST_URI'] );
    $PHP_SELF            = $_SERVER['PHP_SELF'];
}

问题修复:了解问题的真正原因之后就好办了,PHP_SELF 为空是因为 php 配置文件中的 cgi.fix_pathinfo 设为 0,所以把 cgi.fix_pathinfo 配置 改为 1,重启 php 就可以了。

真诚赞赏,手留余香