エックスサーバーで、WordPressの記事を更新しようとしたら、次の画面が出て保存できなくなりました。

原因は、直前にサーバーパネルでWAFの設定をすべてONにしたことでした。この記事では、何が起きていたのか、どう確かめて直したのか、技術ブログならどう設定すればよいのかをまとめます。
この記事の内容は2026年10月時点のものです。
何をしたら起きたか
きっかけは、サーバー会社の無料の脆弱性診断に対応したことです(XServerサイトセキュリティの設定と、指摘6件の直し方)。守りを固めるついでに、サーバーパネルの「セキュリティ」→「WAF設定」で、6つの項目をすべてONにしました。

その後、本番の管理画面で記事を開き、SEOプラグインの説明文を入れて「更新」を押すと、冒頭の501の画面になりました。
エラー画面の説明は当てにならない
画面には「対応していないメソッド(MOVE/COPYなど)を使用した」と書かれています。ただ、記事の更新で送っているのはごく普通のPOSTで、MOVEやCOPYは使っていません。
この画面の説明だけを読んで原因を探すと、遠回りになります。 「直前に何を変えたか」から考えたほうが早く、今回はそれがWAFでした。
原因:「更新」ボタンは本文もまるごと送る
WAFは、サイトへのアクセスの中身を調べて、攻撃に使われそうな文字列があると遮断する仕組みです。エックスサーバーのWAFの各項目は、公式マニュアルによると次のような文字列に反応します。
| 項目 | 反応する文字列(公式マニュアルの要約) | 技術ブログで引っかかりそうなもの |
|---|---|---|
| XSS対策 | スクリプトタグ | JavaScriptのコード例 |
| SQL対策 | SQLの構文 | SQLのコード例 |
| ファイル対策 | .htaccess、.htpasswd、httpd.confなど |
サーバー設定の解説 |
| メール対策 | to、cc、bccなどメールのヘッダー |
メール送信のコード例 |
| コマンド対策 | kill、ftp、mail、ping、lsなど |
ターミナルのコマンド例 |
| PHP対策 | セッションやファイル操作に関わる関数など | PHPのコード例 |
見落としやすいのは、説明文を1行変えただけでも、更新ボタンを押すと本文もまるごとサーバーに送られることです。
今回更新しようとした記事には、.htaccessの設定、PHPの関数、curlのコマンドといったコード例がたくさん入っていました。WAFから見ると、管理画面からの正しい保存も「攻撃に使われそうな文字列を含むアクセス」に見えてしまいます。
ブロックエディターを使っている場合は、501の画面ではなく「更新に失敗しました」などのメッセージになることがあります。
原因の確かめ方
- サーバーパネルの「WAF設定」で、疑わしい項目をOFFにする
- 反映を待つ。 公式マニュアルでは、新しいサーバーパネルで最大30分程度かかるとされています
- 管理画面の編集画面を開き直して、もう一度「更新」を押す
すぐに試して「変わらない」と判断しないことが大事です。設定画面に「反映待ち」と出ている間は、まだ切り替わっていません。
編集画面は開き直してから更新する
エラーのあと、開いたままの編集画面で更新し直すのはおすすめしません。その間にサーバー側で本文を直していた場合(WP-CLIで書き換えたなど)、古い画面の内容で上書きされてしまいます。
技術ブログでのおすすめの設定
コード例を載せる技術ブログでは、すべてONにするのはおすすめしません。今回は次のように設定して、記事の更新ができるようになりました。
データベースを使う機能を守るファイル対策OFF保存できなかった原因の候補。
| 項目 | 設定 | 理由 |
|---|---|---|
| XSS対策 | ON | ONのままでも記事を保存できた。フォームなどへのスクリプトの埋め込みを防ぐ |
| SQL対策 | ON | ONのままでも記事を保存できた。 |
.htaccessの解説を含む記事を書くことがある |
||
| メール対策 | ON | ONのままでも記事を保存でき、問い合わせフォームも送信できた。フォームを悪用したメールの不正送信を防ぐ |
| コマンド対策 | OFF | 保存できなかった原因の候補。コマンド例を含む記事を書くことがあり、問い合わせフォームにも影響しうる |
| PHP対策 | OFF | 保存できなかった原因の候補。PHPのコード例を含む記事を書くことがある |
正直に書くと、3つをいっぺんにOFFにしたので、どれが原因だったのかまでは確かめていません。 ただ、エラーが出た時点では、設定画面でコマンド対策がまだ「反映待ち」でした。そのため、実際に反応したのはファイル対策かPHP対策だった可能性が高いと考えています。
1つずつ切り分けたい場合は、1項目だけONに戻し、反映を待ってから更新を試す、を繰り返します。1回に最大30分程度かかるので、時間に余裕があるときに行います。
WAFは守りの一つに過ぎません。OFFにした分は、WordPress本体とプラグインを最新に保つこと、ログインの試行回数の制限、使っていない機能(XML-RPCなど)を止めることで補います。
WAFを切りたくない場合:記事はSSH経由で直す
WAFが調べるのは、ブラウザなどからサイトへのWebのアクセスです。SSHでサーバーに入ってWP-CLIで記事を書き換える操作は、WAFを通りません。
このサイトでは、記事はローカルのWordPressで書き、WP-CLIで本番に送っています。本文の書き換えだけなら、次のように管理画面を使わずに済みます。
wp post update 123 /path/to/post.html
ただ、SEOプラグインの説明文などを管理画面で入れる場面はどうしても出てきます。管理画面で更新するたびにWAFを切り替えるのは現実的ではないので、今回は上の設定に落ち着きました。
忘れずに:問い合わせフォームが送れるか確かめる
WAFの設定を変えたら、問い合わせフォームが送信まで通るかを必ず確かめます。今回も、設定を変えたあとに確認画面から送信まで通ることを確かめました。
WAFは管理画面だけでなく、訪問者が送るフォームの中身も調べます。たとえばコマンド対策はmailやlsといった文字列に反応するので、問い合わせの文章の書き方しだいでは、正しい問い合わせが遮断されるおそれがあります。お問い合わせはサイトの成果そのものなので、気づかないまま止まっているのがいちばん困ります。
- 確認画面があるフォームなら、確認画面から送信まで通るか
- 届いたメールの内容が欠けていないか
- メール送信の設定やフォームのプラグインを変えた直後なら、なおさら
まとめ
- エックスサーバーのWAFをすべてONにすると、コード例を含む記事を管理画面から更新したときに501になることがある
- 原因は、更新ボタンで送られる本文のコード例。エラー画面の「MOVE/COPY」の説明は当てにならない
- 設定の変更は反映に最大30分程度かかる。待ってから、編集画面を開き直して試す
- 技術ブログでは、コード例に反応する項目はOFFにし、ほかの守りで補う
- WAFの設定を変えたら、問い合わせフォームが送信まで通るかを確かめる
