2026年5月20日
2026年5月20日
mod_securityが原因の500エラーの解決方法【WAFルール誤検知】
はじめに
サーバーに設置されているWAF(Web Application Firewall)の一種である mod_security が、WordPressの正常なリクエストを「攻撃」と誤検知してブロックすることがあります。この場合、管理画面での特定の操作(投稿保存・プラグイン設定変更等)だけ500エラーになるという特徴的な症状が出ます。
mod_securityが原因と疑われる症状
- 特定の管理画面操作(投稿保存・画像アップロード等)だけ500エラーになる
- フロントは正常だが管理画面の一部だけエラーになる
- エラーログに
ModSecurityや403 Forbiddenの記録がある - プラグイン・テーマ・htaccessを確認しても問題がない
エラーログでmod_securityを確認する
サーバーのエラーログを確認します:
[error] ModSecurity: Access denied with code 500 (phase 2).
Pattern match "..." at ARGS:content.
[file "/etc/modsec/rules/..."] [id "1234567"]
[hostname "example.com"] [uri "/wp-admin/post.php"]
このような記録がある場合、mod_securityのルールが原因です。ルールID(上記の 1234567)をメモしておきます。
解決方法①:ホスティング会社に無効化を依頼する
共有ホスティングの場合、mod_security の設定はホスティング側が管理しています。エラーログのルールIDを伝えて、そのルールの除外(ホワイトリスト登録)を依頼します。
解決方法②:.htaccessでルールを無効化する(cPanel系ホスティング)
cPanel系ホスティング(エックスサーバー・ロリポップ等)の場合、.htaccess でルールを無効化できる場合があります:
# 特定のルールを無効化(ルールIDを使う)
<IfModule mod_security2.c>
SecRuleRemoveById 1234567
</IfModule>
または、WordPress の管理ページ全体でmod_securityを無効化する:
<IfModule mod_security2.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>
ただし、上記は mod_security2 が使われている場合の記述です。mod_security(v1)の場合は構文が異なります。
解決方法③:VPS・専用サーバーでの設定変更
SSH アクセスがある場合、mod_security の設定ファイルで除外ルールを追加できます:
# /etc/modsecurity/custom_rules.conf
SecRule REQUEST_FILENAME "@contains /wp-admin/" \
"phase:2,nolog,allow,id:99001"
設定後は Apache を再起動:
sudo service apache2 restart
# または
sudo systemctl restart httpd
CloudflareのWAFが原因の場合
Cloudflare を使っている場合、CloudflareのWAFルールが原因の場合もあります。Cloudflare管理画面 → セキュリティ → WAF → カスタムルール でWordPressの管理URLをホワイトリストに追加します。
注意事項
- mod_security は攻撃を防ぐセキュリティ機能です。完全に無効化すると脆弱性のリスクが増します。問題のあるルールのみを除外することを推奨します。
まとめ
mod_securityが原因の500エラーは、エラーログでルールIDを確認し、そのルールだけを除外することで解決します。共有ホスティングの場合はサポートへの依頼が最も確実です。
関連記事: