WordPressの「admin-ajax.php」エラー解消法


特に問題ないので放置していたら、、、、、、いやいや問題がありました。
admin-ajax.phpは、プラグインで使われる場合がありその場合に動作しない場合があります。
これに苦労させられたので解決方法をメモしておきます。

原因

ウェブサーバーのログに、

  • client denied by server configuration: /○○○/admin-ajax.php

が出ている場合、つまり「wp-admin」(WordPressの管理画面へのアクセス)フォルダに対して、外部からの制限をかけた場合に影響します。たとえばIPアドレス制限などです。パスワード制限は問題ありません。パスワードをいれてからページを閲覧するため、影響を受けません。

解決方法

wp-adminフォルダ直下に、.htaccessがありIPアドレス制限(Limit)の設定がある場合、

<Limit GET POST>
 Order Deny,Allow
 Deny from all
 Allow from アクセスを許可するIPアドレス
</Limit>

<Files ~ 'admin-ajax.php'>
 Order Allow,Deny
 Allow from all
</Files>

admin-ajax.phpに対しては制限を解除するように設定してください。

詳細説明

影響を受けるプラグイン

私が影響を受けたのは、「The Event Calendar PRO」(有償版)のMini Calendar(ウィジェット)でした。
上記エラーが出た場合、IPアドレス制限下では、翌月や前月ボタンを押すとAjaxがバグって(admin-ajax.phpにアクセスできなくて)カレンダーが動かなくなります(ブラウザの再読込が必要)。

IPアドレス制限について

たとえば、よくログイン攻撃に対する防衛策の1つとして、ログイン画面のアクセスを
IPアドレスで制限するというものがあります。企業や大学等限定されたネットワーク内
からしか編集(WordPressにログイン)しないなら、かなり有効です。
通常は、wp-login.phpに対してのアクセス制限をするのでしょう。

wo-login.phpに対するIPアドレス制限

.htaccessに対して、

<Files ~ 'wp-login.php'>
 Order Deny,Allow
 Deny from all
 Allow from アクセスを許可するIPアドレス
</Files>

とします。Allow fromは複数行設定できます。

ですが、さらにwp-adminフォルダにも制限をかけておいたほうが安全です。
そうすると、今回のような問題が出てくるわけですね。

2014年2月12日 木谷

広告

WordPressの「admin-ajax.php」エラー解消法」への2件のフィードバック

  1. ピンバック: wordpressの不正アクセスをベッキベキに防ぐ方法を探してみた。(検証中)

  2. ピンバック: wordpressの不正アクセスをベッキベキに防ぐ方法を探してみた。 – もちあるきやがれ2号館

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中