问题
从 Typecho 迁移回 WordPress 后,出现了一个比较奇怪的问题:访问 https://www.sizau.com/page/1 时,会出现以下报错,从而导致页面加载异常:
Warning: Undefined array key "path" in /wp-includes/canonical.php on line 619
这个问题似乎是因为伪静态底层逻辑上并不允许(同时也不期望用户会)访问 /page/1。而我恰好是从 Typecho 迁移回来的,而部分搜索引擎把这个页面索引了,因此非常有必要修复这个问题。
修复
可以通过修改伪静态配置或者修改 php 文件来修正这个问题。
修改伪静态配置
如果使用的是 Apache,在伪静态配置中添加 RewriteRule ^page/1/?$ / [R=301,L]
即可。
当前站点使用的是 OpenResty,写法为 rewrite ^/page/1/?$ / permanent;
,略有不同。
修改 php 文件
这个问题也可以在 WordPress 代码层面修复,不过需要考虑到版本更新可能需要重新修改的问题。
定位到第 619 行:
$redirect['path'] = preg_replace( '|/' . preg_quote( $wp_rewrite->index, '|' ) . '/*?$|', '/', $redirect['path'] );
在它的前面添加:
if ( ! isset( $redirect['path'] ) ) {
$redirect['path'] = '/';
}
确保 $redirect['path'] 存在,避免报错。