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 エラー時の診断優先順位
- リダイレクト先の URL を確認(/upgrade.php なら DB 未更新のサイン)。
- .htaccess に upgrade.php や install.php を拒否する記述がないか。
- WAF・サーバーログで該当リクエストのブロック有無を確認。
- DB の db_version とファイル側 $wp_db_version の不整合を確認。
- コアファイルの破損・不整合を疑い、公式パッケージで再配置を検討。
学びと要点まとめ
- アップデートは「ファイル更新 + DB 更新」の2段構えが正道。
- /upgrade.php へのリダイレクトは異常ではなく「未更新の兆候」。
- wp core update-db は upgrade.php の安全な代替経路。
- WP-CLI は WordPress を内部ロードし、プラグインの CLI 機能も利用可能。
- キャッシュは種類ごとにコマンドが異なるため、運用ポリシーとして整備する。