WPシステムアップデート&パーマリンク変更で四苦八苦〜REST APIについて学ぶ

4年ぶりにWPシステムアップデートしてみた。ついでに都合悪いパーマリンクを簡素に更新。フツーだったら小一時間もあれば完了する作業だったはずが3日も悩むハメになってしまいました...

元のWPシステムが4.9系のままだったので、5.7系最新版まで一気にアップデートしようという企みで始めた作業でしたが、中間のバージョンのも作って比較検討してみよう...と考えたのが運の尽きでした。

迷宮への一歩〜WPの複数サブディレクトリ管理で検証

サブディレクトリ管理しているオリジナルサイトに加えて、異なるサブディレクトリを3個作りそれぞれに異なるDBでオリジナルサイトをコピー、それぞれを手動で異なるバージョンのWPシステムでアップデートします。

ルートのindex.phpにどこのサブディレクトリのWPを起動させるか記載があるので、これを切り替えて比較をしてみることが出来ます。実際にはサブディレクトリ名が異なるので正しく表示されない箇所が多数発生するので「Search Regex」等を使ってDBのサブディレクトリ名を書き換える作業が必要です。

WPシステムアップデートのある時点で古いプログラムやプラグインが動作しなくなって対応策を考えねばならなかったり、テーマ表示に不具合が出て改修する必要が生じたりするので、まとめて検証するには便利です。

迷宮への2歩目〜パーマリンクの変更

以前は「blog.inmycab.com/カテゴリースラッグ/投稿ID」でパーマリンクさせていましたが、サブカテゴリー階層が深くなるとやたら長いアドレスになるのと、途中でカテゴリー名やカテゴリー階層を変更したりするトラブル可能性があったり、そもそもURLをSEO的に解釈する等もそろそろ馬鹿らしいので...「blog.inmycab.com/投稿ID」とカテゴリースラッグを無くしたパーマリンクに変更しました。

このパーマリンク変更の仕様であれば、特にリダイレクト対策をしなくてもWPシステムが自動的に変更を解して301リダイレクトしてくれるはずです。ただそこに頼るとWPシステムに負担をかけてしまうので保険を掛けます。ルートの.htaccess先頭に下記を追記してサーバー側に301リダイレクト処理をさせます。

RedirectMatch 301 ^/([^/]+)/(\d+)/$ https://blog.inmycab.com/archives/$2
RedirectMatch 301 ^/([^/]+)/([^/]+)/(\d+)/$ https://blog.inmycab.com/archives/$3
RedirectMatch 301 ^/([^/]+)/([^/]+)/([^/]+)/(\d+)/$ https://blog.inmycab.com/archives/$4

作成は「Yoast (ホーム» SEOブログ» WordPressのパーマリンク構造の変更) 」ページを参考に、リダイレクト変換ツール(https://yoast.com/research/permalink-helper.php)を使いました。カテゴリー階層が1階層だけなら1行目のみでOK、ウチは3階層まであるので3種類分を記載しました。
【注意】WPサイトをルート表示(サイトアドレスがルート)させる場合、WP本体をサブディレクトリ管理していても「Is your WordPress site running in a subfolder? For instance in /blog ? Add it here:」欄にはサブディレクトリ名を記載しないこと。

パーマリンク変更は、仕様によっては「Redirection」等のプラグインを使ってコツコツ、リダイレクション処理をしないといけない場合もあります。

迷宮への突入〜脱出〜REST API

結果的にはあながち間違ったことやってなかったワケなんですが、段取りに不備がありとんでもない迷宮に入ることに...

上記ステップは記述した順番に整然と作業したワケではなく、都度チェックしながら改修を加えながらサブディレクトリのWPを追加していったワケですが....ある段階からオンサイトでの検証が必要になります。そうするといろいろ不具合が出始めました。

「.htaccess付記無しだとリダイレクションしてくれなくなった」
「「Redirection」を起動するとREST APIエラーが出る」
「メニューバーが表示されない」「プレビューで「存在しないページ」エラーが発生」
そのうち「プレビューする権限がありません」
「テーマエディタで編集を加えて保存しようとすると「FTP使え」アラート」加えて当該書類のコードがまっさらに消去されてしまう現象が発生...等々

これをどう考えるか
DB破損?〜バックアップをレストアしても変わらず
システム破損?〜当該システムをレストアしても変わらず
プラグインの干渉?〜最小基本構成でも変わらず....

この辺までで2日消耗

「REST APIエラーが出る」理由は? どうやらそのへんに原因がありそうだったので設定の組み合わせをチェックしてみると、設定/一般のサイトアドレス(URL)の設定に原因があることが判明しました。

複数のサブディレクトリで個々に同一WPアドレス(サイトアドレス)で運用する分にはほとんど問題ないのですが、どうやらサイトアドレス指定が重なるとトラブルみたいです。
ルートのindex.phpでサブディレクトリを指定しているので問題ないと思い込んでいたところに落とし穴があり、サイトアドレス指定が重なるWP同士でREST APIが競合するようです。

上記の不具合の全てはREST APIの競合にあり、複数系統のREST APIのうち幾つが競合するかによって不具合の状態や数もさまざまでした。

対処としては...サイトアドレスを重複させて使わない。
全く基本的なことなのですが、思い込みやサブディレクトリWPの切り替え段取り間違いと不具合の変化に戸惑ってしまい、原因を把握するのに時間が掛かってしまいました。

現在、サイト復旧率は60%くらい
ドタバタで短時間ながら誤ったリダイレクト処理をしてしまった関係で、Googleから飛んでくる場合は幾つかの記事が迷子状態ですが、しばらくすればリダイレクト復旧すると思います。あとはコンテンツの積み残しを整理して掲載するくらい...です。