WordPress error query.phpを対処してみた

Pocket

いつから出ていたのかわかりませんが、apacheからエラーが多発していて困っていました。
エラー内容は以下の通りで、10分おきぐらいに出ているのです。

[error] [client 66.249.69.74] PHP Warning: reset() expects parameter 1 to be array, null given in /xxx/blog/wp-includes/query.php on line 2934

問題となっているらしいquery.phpの2934行を見てみると
wordpressのcategory処理が問題のようです。
エラー行は2931など違う時もありました。
対処方法がないのかとググってみると似たような現象の対処方法があり、
hotfixを適応してみましたが改善ありませんでした。

とりあえず、エラー時に何が起きているのかアクセスログを見てみました。
するとGoogle botが以下のようなへんなURLにアクセスしていることがわかったのです。

/blog/page/34/0/0/page/21/
/blog/tag/is03/0/0/page/4/
/blog/page/78/0/
/blog/category/pc/cooling/0/page/66/0/page/64/
/blog/tag/is03/0/page/21/

ここにアクセスするとカテゴリが正常に選択されていない状態で表示されます。
ですが、毎回エラーをはいてしまうのです。
このようなURLにアクセスした場合の対処が出来ていない
query.phpが原因なのかもしれませんが、
PHPがよくわからない管理人には修正することが出来ません。

考え方を変えて、このようなURLにアクセスするのはGoogle botだけなので、
アクセスしてきたらhttp://kulog.org/を開くようにしました。

設定としてはhttpd.confに以下を追記

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteLog “logs/rewrite_log”
RewriteLogLevel 1
RewriteRule ^/(.*)page(.*)/page http://kulog.org/ [L]
RewriteRule ^/(.*)/\d+/\d/page http://kulog.org/ [L]
RewriteRule ^/(.*)page/\d+/\d+/ http://kulog.org/ [L]
RewriteRule ^/blog/[a-z]+/\w+/\d/page http://kulog.org/ [L]
</IfModule>

ほかにもRewriteRuleがありますが省略しています。
rewrite_logで問題なくURLが書き換えられているか確認したあと、
RewriteLogLevel 0にして設定は終了です。
正規表現のところ、もっとスマートな書き方があるんだろうなあ・・・

追記:2011/08/04
あとでrewrite_logを確認したら、予想外なURLでのアクセスがあったので
RewriteRuleを追記修正しています。
へんなURLのまま検索エンジンに登録されているのもあったんだよなあ
これはGoogle botが悪いのかWordpressが悪いのか・・・

Pocket

コメントを残す