人氣 251°c

WP Canonical.php文件出現錯誤

WordPress 開啟 Debug 偵錯模式,以便檢查出錯誤信息。看到博客有幾處錯誤回報,在 WordPress Support 技術支援網站,找到相關的問題,但都沒有得到官方有效解決方法。

這個問題似乎在 8 年前已經有人反饋給WP官方人員,直到現在都沒有高手去 Fix Bugs 這個問題。

官方反饋的主題:

1. canonical 39827

2. canonical 55653

3. canonical 51725

在 error.log 或 debug.log 錯誤信息文件:

PHP Warning: Undefined array key "path" in /home/xxx/public_html/wp-includes/canonical.php on line 392

PHP Warning: Undefined array key "path" in /home/xxx/public_html/wp-includes/canonical.php on line 590

PHP Warning: Undefined array key "path" in /home/xxx/public_html/wp-includes/canonical.php on line 606

wp-includes/canonical.php 文件 594 行:

if ( empty( $user_home['path'] ) ) {
$user_home['path'] = '/';
}

wp-includes/canonical.php 文件 606 行:

$redirect['path'] = preg_replace( '|/' . preg_quote( $wp_rewrite->index, '|' ) . '/*?$|', '/', $redirect['path'] );

Canonical.php 392 590 606 問題原因:

這是在「主頁 / 首頁」的分頁造成的。如果第一頁的分頁若是有用戶以「https://www.domain.com/page/1」訪問頁面,就會回報錯誤。提示如下:

經過深入檢查,是由於 WordPress 固定連結,使用的類似「/%category%/%postname%」自定義結構的結束沒有斜杠,而造成的 WordPress 報錯,而使用「/%category%/%postname%/」這樣結尾有斜杠的結構則不會報錯。通過 Google 查詢發現有一堆的網站有這樣的錯誤提示,大家都慒然不知。

解決方法一:

RewriteEngine On
RewriteRule ^page/1$ /? [L,R=301]

RewriteEngine On
Redirect 301 /page/1 https://www.domain.com

使用說明:在根目錄新增一份 .htaccess 文件將以上內容放進去。

注意:必須放在「#BEGIN WordPress」連結規則的前面才可。請看圖片▼

解決方法二:

//301 跳轉 for canonical.php 392 590 606
add_action( 'template_redirect', 'fanly_basic_redirects' );
function fanly_basic_redirects() {
if( is_home() && get_query_var('paged')===1 ) {//主頁 page/1 報錯
wp_redirect( home_url(), 301 );
die;
}
}

使用方法:把這段代碼放置到當前所用的 WordPress 主題的 functions.php 文件中即可。

解決原理:運用 301 重定向,跳轉當 WordPress 識別到是通過 WordPress 主頁/page/1 訪問的時候就直接跳轉到主頁。

Canonical.php 594 問題:

PHP Warning: Undefined array key "path" in /home/xxx/public_html/wp-includes/canonical.php on line 594

Bug fix: 如果經過以上的操作後,仍然出現此問題。請切換回官方的佈景主題。

標籤: