【All-in-One WP Migration】「サーバーに問題が発生しました」エラーの原因と対処法【WordPress】

こんにちは、しばです。
WordPressプラグイン「All-in-One WP Migration」でサイトの引越しをしようとしたところ、エクスポート時に「失敗 サーバーに問題が発生しました」と表示されてエクスポート出来ないという事象に遭遇しました。

インポート時はサイズ制限などでたまにエラーに遭遇するんですが、エクスポート時は初めて。

調べて無事解決したので、今回のエラーの原因とその対処法についてご紹介します!

事象発生の経緯

とあるサイトでサーバーを変更する機会があり、All-in-One WP Migrationのメニュー画面からデータをエクスポートしようとしました。

ダウンロードをしてみると、即時エラーが表示。

失敗 サーバーに問題が発生しました

失敗 サーバーに問題が発生しました
プラグインによるエラー表示ではなくchromeブラウザの方のエラー。何もダウンロードされない

次にSafariで同じようにダウンロードしたところ、ダウンロードはできたものの3KBほどの.wpressファイルでした。
中身から、500エラー(内部サーバーエラー)が発生してることを確認。

.wpressファイルの中身

特に無料版の制限に引っかかるサイズではないし、そもそもそれで引っかかるのはインポート時。
エクスポート時はサイズ制限は特にないはず…(´・ω・`)?

結論から言うと、このエラーはプラグイン側の問題ではなく、サーバー側の制限によってダウンロードが妨害されることで発生したものでした。

ブラウザのダウンロードが妨害されるのであって、FTPソフトやWebFTPからダウンロードを行えばOK。
ブラウザでダウンロードしたい場合は、あまりオススメできない方法なんですがこちらも一応可能でした。

FTPでのダウンロードで対応可能

ということで、まずはFTPでダウンロードする方法をご紹介。
公式でもこのエラーの問い合わせに対してはFTPでのダウンロードでの対応を促してるので、FTPが使えないという場合以外はこの方法がいいと思います。

今回のエラーは、プラグインのエクスポート処理が完了した後のダウンロードの段階で発生しています。

実はAll-in-One WP Migrationのエクスポートで生成したファイルはサーバー上の「wp-content>ai1wm-backups」フォルダに残っており、このファイルは本来ブラウザからダウンロードできるファイルと同一のものなので、これを使ってインポートすれば良いということ。

なので、そのファイルをFTPを使って手動でダウンロードしていきましょう。

ダウンロード手順

※ キャプチャのFTPソフトはCyberduck(Mac)

1.FTPソフト(またはWebFTP)を使ってサーバーへ接続

2.WordPressインストールフォルダから「wp-content」→「ai1wm-backups」フォルダへ移動。

エクスポート処理が完了した時刻で生成された「.wpress」ファイルがあるので、そちらを自分のPCへダウンロードします。

ダウンロードが完了したら、あとは本来のデータと同じように引越し先のWordPressのプラグインインポート画面でドラッグ&ドロップするだけ。

ブラウザからダウンロードしたい場合

先ほど書いた通りFTPを使えるなら前述の内容で対応するのが一番ですが、どうしても使えない場合もあると思います。

なんとかブラウザからダウンロード出来る方法を調べてみました。

なぜダウンロードが出来ないのか

まずブラウザからダウンロードができない原因について。

今回私が使っていたサーバーはXFREEだったんですが、XFREEを含めたいくつかのサーバーで同様の事例を見かけました。
どうやら原因は.htaccessにあってサーバー側の制限との問題らしいということなので、具体的に何に問題が起きてるか調査。

All-in-One WP Migrationのプラグインフォルダ内にある.htaccessの内容がこちら。

<IfModule mod_mime.c>
AddType application/octet-stream .wpress
</IfModule>
<IfModule mod_dir.c>
DirectoryIndex index.php
</IfModule>
<IfModule mod_autoindex.c>
Options -Indexes
</IfModule>

記述内容

  • .wpress拡張子のファイルは「application/octet-stream」という種類のファイルだよ
    ※ 「application/octet-stream」は個別のMIMEタイプが用意されていない時などに使われるタイプ。詳細は下記URLが分かりやすかったです!
    application/octet-stream【MIMEタイプ】とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
  • ファイル名が指定されずにディレクトリだけのURIでリクエストされた場合、index.phpを参照してね
  • ウェブからディレクトリの中のファイル一覧が見えないようにしてね(ファイル一覧機能の無効化)

次に、XFREEと、事例で見かけたGMOクラウド iCLUSTA+シリーズ、wpXクラウドサーバーのhtaccessに関連するディレクティブ制限がこちら。

XFREE 以下のディレクティブの使用を制限。
SetHandler、AddHandler、AddType、DefaultType、ForceType、AddInputFilter、AddOutputFilter、AddOutputFilterByType、SetOutputFilter、SetInputFilter
参照).htaccessについて|無料レンタルサーバー【エックスフリー】
GMOクラウド iCLUSTA+ AuthConfig と Limit 以外のディレクティブの使用を制限
参照)FAQ_iCLUSTA – 自分で用意した.htaccessファイルは使用できますか?
wpXクラウド そもそものディレクティブ制限は不明。以下は使用可能とのこと
AddType、DefaultType、ForceType、AddOutputFilterByType、AddOutputFilter、SetOutputFilter、AddInputFilter、SetInputFilter
参照)これまで利用できなかったWordPressプラグインが使えるように! 機能追加・仕様変更による利用制限緩和のお知らせ

All-in-One WP Migrationの.htaccessと関連するところはピンク色

補足) ディレクティブとは

.htaccessに限らず使われる用語でプログラミングにおける指示、命令・コマンドのこと。
このコマンドを値と合わせて指定することで、目的に応じた設定が可能。

上記をみると引っかかっているディレクティブはサーバーによってばらばらですが、いずれもプラグインの.htaccessに記載されているディレクティブの使用がサーバー側で禁止されているため、500エラーが発生してブラウザからのダウンロードができないことが原因な模様。
(wpXクラウドはおそらくDirectoryIndexとOptionsが制限に該当するため無効)

実際に、.htaccessを削除したり内容をコメントアウトして対応している事例をよく見かけました。

私もこの方法でチャレンジするも、変わらず500エラーが発生
.htaccessを削除したりコメントアウトして上書きしても、処理自体は問題なく出来るんですが何故かうまくいきませんでした(´Д`;)

プラグイン側で再生成を行なっている

ということでプラグインの中身を確認。
どうやら.htaccessが削除や修正されると、プラグインを操作するタイミングで再生成される仕組みになってたようです。

試しに、.htaccessを再生成する関数の呼び出し元をコメントアウトして上書きアップロード。

/wp-content/plugins/all-in-one-wp-migration/lib/controller/class-ai1wm-main-controller.phpを開く

//中略
public function setup_backups_folder() {
	$this->create_backups_folder( AI1WM_BACKUPS_PATH );
	//$this->create_backups_htaccess( AI1WM_BACKUPS_HTACCESS );
	$this->create_backups_webconfig( AI1WM_BACKUPS_WEBCONFIG );
	$this->create_backups_index_php( AI1WM_BACKUPS_INDEX_PHP );
	$this->create_backups_index_html( AI1WM_BACKUPS_INDEX_HTML );
}
//中略

254行目のcreate_backups_htaccess()をコメントアウト

その後.htaccessを削除したところ、プラグインを操作しても再生成がされなくなりました。
そしてブラウザからエクスポートファイルをダウンロードすることに成功!

(結論)ブラウザからのダウンロードは可能だが、結局FTPを使う必要がある

まとめると、ブラウザからダウンロードするには

  • FTP(もしくはWordPressのプラグインエディター)を使って、前述ファイルを修正する
  • FTP上でプラグインの/wp-content/ai1wm-backups/.htaccessを削除(もしくは記述をコメントアウト)する

の対応が必要です。

なのでFTPを一切使わずブラウザからダウンロードしたいというのは無理かなぁと。
ブラウザからダウンロード出来るようにする方法に関しても、個人的にはあまり製作者が意図した制限を外すべきではないと思ってるので、どうしても必要な理由がなければやらないほうがいいかなと考えています。

さいごに

これまでディレクティブの制限を意識する機会があまりなく。
様々なサーバーで使用される可能性があるツールではこういうケースがあるんだなぁと勉強になりました。

有料サーバーであればディレクティブ制限もなくなってくるので優先順位は高くないかもですが、今後WordPressプラグインや汎用的なツールを作る時用に頭の隅に置いとこうと思います。

今回の対処法では結局FTPを使う必要があります。
ウェブ系初心者、WordPress初心者の方だとハードルが少し高いかもしれないけど、ダウンロードだけしちゃえばあとはまた管理画面上から全てできる点で、やっぱり初心者の方にとってかなり使いやすいプラグインだなぁと思います。

FTPを触ってみる良い機会だと思うでの、ぜひチャレンジしてみてください!

参考サイト