WordPress 在 404 页面显示首页模板问题的修复
问题描述:在一个 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 就可以了。
真诚赞赏,手留余香