WordPress 更新後の 403 エラーと WP-CLI による復旧方法

WordPress 6.9 へのアップデート後に 403 Forbidden が発生した。事実関係、原因、対処法、ならびに再発防止のための知見を整理した。


発生した現象

管理画面へアクセスするとリダイレクトされ、403 Forbidden となった。

  • 全プラグイン無効化、.htaccess とパーミッション確認済みでも改善せず。
  • WP-CLI のデータベース更新実行で復帰した。

根本原因

  • コア更新後、WordPress 本体が持つ $wp_db_version と、DB 内の wp_options.db_version が不一致の状態だった。
  • この不一致により管理画面アクセス時に /管理画面のアドレス/upgrade.php へ強制リダイレクトが発生。
  • 環境側の制限やルールにより upgrade.php がブロックされ、結果として 403 が表面化した。

WP-CLI による復旧コマンド

CLI からデータベース更新を実行すると、Web 経由で upgrade.php を踏まずに整合が取れる。

1
wp core update-db

状態確認コマンド

ファイル側と DB 側のバージョン整合を確認する。

1
2
3
wp core version
wp option get db_version
grep db_version wp-includes/version.php

安全なアップグレード手順

ファイル更新と DB 更新を常にセットで実行する。

1
2
3
4
5
wp core update
wp core update-db
# 必要に応じてキャッシュクリア
wp w3-total-cache flush all
wp transient delete --all

WP-CLI の仕組み(要点)

  • wp 実行時に WordPress を PHP から内部ロードし、Web を介さずに各 API を利用する。
  • プラグインは WP_CLI::add_command() で独自 CLI コマンドを登録できる。
  • そのためプラグイン機能(例:キャッシュ削除)も CLI から実行可能になる。

キャッシュクリア TIPS

代表的なクリア操作をまとめて掲載する(必要なもののみ実行)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# トランジェント(DB 内一時キャッシュ)
wp transient delete --all

# オブジェクトキャッシュ(バックエンド有効時)
wp cache flush

# W3 Total Cache
wp w3-total-cache flush all

# WP Super Cache
wp super-cache flush

# LiteSpeed Cache
wp litespeed-purge all

# 断片化除去とインデックス再構築
wp db optimize

403 エラー時の診断優先順位

  1. リダイレクト先の URL を確認(/upgrade.php なら DB 未更新のサイン)。
  2. .htaccess に upgrade.php や install.php を拒否する記述がないか。
  3. WAF・サーバーログで該当リクエストのブロック有無を確認。
  4. DB の db_version とファイル側 $wp_db_version の不整合を確認。
  5. コアファイルの破損・不整合を疑い、公式パッケージで再配置を検討。

学びと要点まとめ

  1. アップデートは「ファイル更新 + DB 更新」の2段構えが正道。
  2. /upgrade.php へのリダイレクトは異常ではなく「未更新の兆候」。
  3. wp core update-db は upgrade.php の安全な代替経路。
  4. WP-CLI は WordPress を内部ロードし、プラグインの CLI 機能も利用可能。
  5. キャッシュは種類ごとにコマンドが異なるため、運用ポリシーとして整備する。