サーバー移転で、WordPressのリンクが全部切れた

 サーバー移転は、phpMyAdminを使って、問題なく終わったと思っていた。

 トップページも表示されていたし。ところが、メニューからのリンクが全部サーバーエラーになってしまっていたのだ。

 このサイトは、パーマリンク設定をカスタム構造「/%category%/web%post_id%.html」にしていて、それ自体は、phpMyAdminでインポートした際に、ちゃんと入力されていた。

 ただ、動作的に、この辺りが怪しいとは思ったので、元々入力されていたものを変更することなく、「変更を保存」を押すと、あっさりリンクは直った。

解決方法:管理画面>設定>パーマリンク設定 カスタム構造に入力されているのを確認の上、「変更を保存」を押す。

CPIでWordPress

クライアントのCPIサーバーにWordPressをインストールする。たしかここは、PHPに対する扱いが面倒だったような気がしたので、.htaccessファイルが自動で追加されるのを期待して、コントロールパネルからインストールしてみる。インストール自体はうまくいったが随分と古いバージョンだったので、上書きで2.7Jをインストール。すると、文字化け。軽くググってみたら、CPIでWordPressをやるのは結構厄介?

あと、utf-8にしたphpMyAdminでテーブルを削除できないのだが、ja-eucに変更してからだと削除できる。

ここを参考にphp.iniを作成する。コントロールパネルの【お客様情報】から、【プログラムのパスとサーバの情報】の下の方にある使用するPHPと同じバージョンのphp.ini情報をコピーして、下記の記述を修正する。

mbstring.internal_encoding = utf-8
mbstring.encoding_translation = Off
mbstring.http_input = auto
mbstring.detect_order = auto

ァイル名を【php.ini】として保存して任意のディレクトリにアップロードする。(secureなディレクトリが良)

次に、php.iniの設定を反映させるため、php.ini の設置場所を指定した一行を記載した.htaccessを作成する。これにより、下位ディレクトリ全体にPHPの独自設定を反映させる。

suPHP_ConfigPath /usr/home/(ユーザーID)/secure/(ディレクトリ)/

これで、utf-8のPHPが指定したディレクトリで動くようになり、wordpressの文字化けも解消した。phpMyAdmin が ja-euc のままだったが、文字化けにならず、念のため utf-8 にした後も問題なく動作した。

サーバージプシー

短期間に、2度サーバー移転をするはめになった。

最初はXREA Plus S266サーバーを利用していたのだが、負荷が急に高くなったので、負荷観測所で吟味して選んだのがS281サーバー。これなら快適だろうと思ったのもつかの間、このサーバーはデータベースに問題があるようで、頻繁にデータベースにアクセスできなくなった。いったいどれくらいの頻度でエラーになっているのか気になって、サーバーを監視してみると、日に何度もエラーメールが届く。だいたい一度のエラーで30分程度アクセス不能になっているようだ。

というわけで、またサーバー移転をすることに決めた。

WPのインポート機能は、やはりうまく動作しなかった。まったくしないのではなく、中途半端にインポートされるので、なにかこちらに問題があるような気がしないでもないが、もう面倒なのでphpMyAdminで直接やることにする。

まだドメインのDNSは書き換えていないので、事前に動作チェックするために、phpMyAdminを使ってインポートする場合、url指定の部分を書き換えておく必要がある。

wp_optionsのoption_nameのsiteurlを独自ドメインのものではないサーバーurlを入れておく。最終的には、ここは独自ドメインに変更。

インポートは無事に成功したようだったが、「ダッシュボード>設定>ブログのアドレス (URL)」に該当する箇所がphpMyAdminで見つけられなかったので、独自ドメイン(旧サーバー)へ飛んでしまう。
そこで、「http://新サーバードメイン/wp-admin/」でなんとか新サーバーのダッシュボードへログインしてこの部分を修正した。

無事、移転手続きも終わったが、リンクが全て切れてしまった。パーマリンクも前に使っていた「/%category%/web%post_id%.html」はきちんと入っている。ただ、なぜかWordPressを新サーバーにインストールした際に、勝手に.htaccessファイルが作られていてその中身がデフォルトを指定する記述になっていた。そこで、パーマリンク指定をデフォルトにしてみる。これだとリンクが効いている。そこで、新規に空の.htaccessファイルを設置し、改めてカスタム構造を指定した。無事リンクが効くようになった。これでやっとサーバー移転完了。WordPressのサーバー移転の勉強にはなったが、当分移転作業はしたくないな。

サーバー移転の手順

XREA Plusの場合

  1. 新サーバーに「web.level-k.jp」のディレクトリを作成する。これは、DNSの割当てがまだ旧サーバーに向いているためで、手動で行う。
  2. 「web.level-k.jp」内にWordPressデータをアップロードする。
  3. 現在使用しているテーマとプラグインも追加でアップ。空の.htaccessファイルもアップしておく(パーミッションは「666」)。
  4. 新サーバー用のwp-configファイルを作成しアップする。
  5. 新サーバーのWordPressにIPアドレスでアクセスする。URLをindex.phpまで含めないと認識しなかった。
  6. 旧サーバーのWordPressからエクスポートしたWXRファイルを新サーバーにインポートする。
    ダッシュボードにログインし、「管理>インポート」で、エラーが発生しました。アップロードしたファイルを…に移動できませんでした。というメッセージが出た。
    このエラーはパーミッションの問題かと思い、変更すると、次の画面「投稿者の割り当て」に進めた。ここでは、インポートした投稿や下書きの編集/保存を簡単にするために投稿者名を変更することができるようだ。添付ファイルののインポートはないので、チェッックしない状態で、「実行」。「実行」ボタンを押してから結構時間がかかった挙句にうまくいかない…
    が、何度か試したところ、インポートできたようだ。何度もボタンを押したせいだと思うが、サブカテゴリーが重複しまくっていた。手動で削除。サイドメニューとお問い合わせフォーム、パーマリンク設定もなぜか反映しなくて、面倒だから手動で再作成した。
    後記:他の問題解決の際に気がついたが、これは適切な場所にアップロードができなかったからかもしれない。「設定>その他の設定>アップロードするファイルの保存場所」が「wp-content/uploads」になっているか確認すること。また、「uploads」フォルダは最初から入っているが、これを削除してから、同じものを作成しパーミッションを適切に割り当てる。

画像のアップロード

む、画像がアップロードできない!
調べてみると、XREAのPHPはSAFE MODEで動いているということがわかった。

このサイトを参考に、.htaccessファイルを追加したが、それでもアップロードできない。サーバー内を覗いてみて分かったのだが、本来格納されるべきuploadsフォルダではなく、一つ上の階層にアップロードされていた。
これは…もしかしたらインポートがうまくいかなかったのと同じ問題なのではなかろうか?
というのも、画像がアップロードされてしまった場所に、インポートのファイルらしきものもあったからだ。

設定を見直してみることにする。
すると、「設定>その他の設定>アップロードするファイルの保存場所」が「wp-content」になっていたので、「wp-content/uploads」に変更した。これで解決だと思ったのだが、やはりアップロードできない。前とは違って、uploadできないというエラーメッセージが出るのだ。パーミッションも問題ないのに。そこで、元々入っている「uploads」フォルダを削除し、自分で同じファイル名でフォルダを作り、パーミッションを設定してみた。

すると! 無事アップロードが出来たのだ。なぜこの作業で出来るようになるのかはサッパリ分からないが、とりあえず問題は解決。