カテゴリー: WordPress

WordPress関連の投稿

  • WordPressサイトエディターで「更新に失敗しました」エラーが発生する原因と解決方法

    問題の症状

    WordPress 6.7以降のサイトエディター(Site Editor)で、フロントページなどのテンプレートを編集・保存しようとすると、以下のエラーが発生することがあります:

    更新に失敗しました。 返答が正しい JSON レスポンスではありません。
    

    ブラウザのDevToolsで確認すると、以下のような 403 Forbidden エラーが表示されます:

    POST /wp-json/wp/v2/templates/テーマ名/front-page 403 (Forbidden)
    

    原因の調査と特定

    1. 一般的な原因ではない

    最初に疑われがちな以下の原因は、今回のケースでは該当しませんでした:

    • プラグインの競合
    • ユーザー権限の問題
    • メモリ不足
    • サーバーの権限設定
    • WordPress本体の不具合

    2. 真の原因:WAFによる誤検知

    実際の原因は、レンタルサーバーのWAF(Web Application Firewall)による誤検知でした。

    具体的な検知内容

    サーバーのWAFログには以下のような記録が残されていました:

    クロスサイトスクリプティングの試みの可能性11({x:window.onunload=alert})
    

    なぜ誤検知されるのか

    WordPressのブロックエディターは、スタイル情報を以下のようなJSON形式で送信します:

    {
      "style": {
        "spacing": {
          "padding": {
            "top": "var:preset|spacing|50",
            "bottom": "var:preset|spacing|50"
          },
          "margin": {
            "top": "0",
            "bottom": "0"
          }
        }
      }
    }
    

    WAFは、この正当なJSON構造を XSS攻撃パターン {x:window.onunload=alert} と誤認識してブロックしてしまいます。

    問題の再現と検証方法

    1. 段階的なテスト

    以下の手順で問題を再現できます:

    1. 空のフロントページを作成成功
    2. 簡単なコンテンツを追加成功
    3. スタイル設定(余白など)を追加403エラー発生

    2. ブラウザのDevToolsで確認

    1. F12キーでDevToolsを開く
    2. Networkタブを選択
    3. サイトエディターで保存を実行
    4. 失敗したリクエストの詳細を確認

    Request Headers で以下を確認:

    x-wp-nonce: [数字]
    content-type: application/json
    

    Response Headers で以下を確認:

    content-type: text/html; charset=UTF-8  ← 本来はapplication/jsonであるべき
    

    3. WAFログの確認

    レンタルサーバーの管理画面でWAFログを確認すると、クロスサイトスクリプティングの検知履歴が見つかります。

    解決方法

    Option 1: WAFの除外設定(推奨)

    対象URL:

    /wp-json/wp/v2/templates/*
    

    除外理由:

    WordPress Site Editor の正当なリクエスト
    

    セキュリティ上の考慮事項

    低リスクの環境(推奨):

    • 管理者が1人のみ
    • 小〜中規模サイト(1000PV/日以下)
    • 高価値ターゲットではない

    高リスクの環境(慎重に検討):

    • 複数の管理者がいる
    • 大規模サイト
    • 企業サイトなど重要なサイト

    Option 2: 代替手段

    除外設定が困難な場合は、以下の代替手段を検討:

    1. クラシックエディターの使用
    2. テーマファイルの直接編集
    3. WordPress更新待ち

    対策後の確認

    WAFの除外設定を行った後、以下を確認してください:

    1. サイトエディターで正常に保存できるか
    2. 他のWordPress機能に影響がないか
    3. セキュリティログに異常がないか

    予防策

    1. 定期的な更新

    • WordPressコアの更新
    • テーマの更新
    • プラグインの更新

    2. セキュリティ対策の維持

    • 強力なパスワードの使用
    • 定期的なバックアップ
    • ログイン試行制限の確認

    3. 情報収集

    • WordPress公式フォーラムの確認
    • レンタルサーバーのお知らせ確認
    • セキュリティ情報の収集

    まとめ

    この問題は、WordPressの正当な機能とサーバーセキュリティ機能の互換性問題が原因です。

    重要なポイント:

    1. エラーメッセージだけでは原因特定困難
    2. ブラウザのDevToolsでの詳細調査が必要
    3. WAFログの確認が決定的な証拠
    4. 適切な除外設定で解決可能

    同様の問題に遭遇した場合は、まずサーバーのWAFログを確認することをお勧めします。


    参考情報:

    • WordPress Version: 6.7+
    • Twenty Twenty-Five テーマ使用時に特に発生しやすい
    • レンタルサーバーの種類によって検知パターンが異なる場合あり
      今回はOnameのレンタルサーバーでした。

    この記事が同じ問題で困っている方のお役に立てれば幸いです。

  • WordPressのURL変更

    WordPressのURL変更

    WordPressで投稿や固定ページのURLに「wp」や「?p=」と表示されないようにするには、パーマリンク設定を変更する必要があります。具体的な手順は以下の通りです:

    手順

    1. WordPressのダッシュボードにログイン
      • WordPressにログイン後、管理画面に移動します。
    2. パーマリンク設定の変更
      • 左側のメニューから「設定」→「パーマリンク設定」を選択します。
    3. 希望のURL構造を選択
      • パーマリンク設定画面で、「投稿名」や「カスタム構造」などを選択できます。例えば、「投稿名」を選択すると、URLがhttps://example.com/投稿名/という形になります。
      • カスタム構造を使いたい場合は、以下のように設定することもできます: /%category%/%postname%/
      これにより、投稿ごとにカテゴリーや投稿名を反映させたURLになります。
    4. 変更を保存
      • 設定を変更したら、「変更を保存」ボタンをクリックして、設定を反映させます。

    注意点

    • もし「?p=」のようなURLが表示されている場合、それは「デフォルト」設定になっているため、「投稿名」や「カスタム構造」を選択することで、そのようなURLを回避できます。
    • 上記の設定を変更しても、すでに公開されているページや投稿に変更が必要な場合があります。場合によってはリダイレクト設定が必要になることもあります。

    これで、WordPressの投稿や固定ページのURLがより分かりやすい形で表示されるようになります。

    「パーマリンク設定でwpが必ず表示される」という場合、いくつかの原因が考えられます。通常、WordPressの標準パーマリンク設定ではwpがURLに表示されることはありません。ですが、以下の原因や解決方法が考えられます。

    1. WordPressインストール場所がサブディレクトリの場合

    • 原因: WordPressをサブディレクトリ(例えばexample.com/wp/)にインストールしている場合、wpがURLに含まれることがあります。この場合、WordPressのURLとサイトのURLが異なることが原因です。
    • 解決方法:
      1. WordPressのインストール先を確認: 管理画面の「設定」→「一般」で「WordPress アドレス (URL)」と「サイトアドレス (URL)」が正しく設定されているか確認します。
      2. 「サイトアドレス (URL)」をhttps://example.com/に設定し、「WordPress アドレス (URL)」をhttps://example.com/wpのように、wpディレクトリに合わせる場合があります。

    2. .htaccessファイルの設定

    • 原因: サーバーの.htaccessファイルが正しく設定されていない場合、パーマリンクの設定が正しく反映されないことがあります。
    • 解決方法:
      1. 管理画面の「設定」→「パーマリンク設定」に移動し、設定を再保存します。これにより、.htaccessが自動的に更新されます。
      2. もし手動でwpディレクトリにインストールされている場合、.htaccessファイル内でパーマリンク設定が正しく反映されるように記述を確認してください。例えば、次のような記述です: RewriteEngine On RewriteBase /wp/ RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /wp/index.php [L]

    3. プラグインの影響

    • 原因: 一部のプラグインがURLにwpを追加することがあります。特に、キャッシュやSEO関連のプラグインが影響を与えていることがあります。
    • 解決方法:
      1. プラグインを無効にして、URLが変更されるか確認します。特に、キャッシュプラグイン(例: W3 Total Cache、WP Super Cache)や、SEOプラグイン(例: Yoast SEO)が影響を与えることがあります。
      2. 1つずつプラグインを再有効化して、どのプラグインが原因か特定します。

    4. テーマやカスタム設定

    • 原因: 使用しているテーマやカスタムコードがwpをURLに追加している可能性があります。
    • 解決方法: 使用中のテーマやカスタムコードを確認し、URL設定に関わる部分を見直してください。wpを強制的に含めるコードが記述されていないかチェックします。

    まとめ

    まずは、インストール先や.htaccessファイルの設定を確認し、次にプラグインやテーマが影響しているかどうかを確認するのが良いでしょう。それでも問題が解決しない場合は、サーバー側の設定やWordPressの再インストールを考慮することも必要かもしれません。