Некоторые пользователи WordPress, когда пытаются запостить большой текстовый пост или страницу сталкиваются со следующей ошибкой:
The requested resource
/wp-admin/post.php
does not allow request data with POST requests, or the amount of data provided in the request exceeds the capacity limit.
При этом в журнале /var/log/httpd/modsec_audit.log появляется ошибка:
Message: Request body no files data length is larger than the configured limit (1048576). Apache-Handler: php5-script Stopwatch: 1393266872414275 4360561 (- - -) Producer: ModSecurity for Apache/2.5.11 (http://www.modsecurity.org/); core ruleset/1.6.0. Server: Apache/2.2.20 (CentOS) mod_rpaf/0.5 PHP/5.2.17 with Suhosin-Patch mod_ssl/2.2.20 OpenSSL/0.9.8e-fips-rhel5 NPS/0.6.1 mod_mass_hosting/0.2
* Обычно этот журнал недоступен пользователям shared хостинга.
Ошибка сигнализирует о том, что тело HTTP запроса превышает размеры установленные в конфигурации WEB сервера. Детальное пояснение того как и почему эти директивы используются можно найти здесь.
Гугление часто приводит на страницы с рекомендациями изменить настройки при помощи редактирования файла /etc/modsecurity2/modsec2.conf
# Basic configuration options SecRuleEngine On SecRequestBodyAccess On SecResponseBodyAccess On ... # Maximum request body size we will accept for buffering SecRequestBodyLimit 1124288 # Store up to 1MB in memory SecRequestBodyInMemoryLimit 1124288 # Buffer response bodies of up to SecResponseBodyLimit 1124288
Однако на серверах массового (shared) хостинга эти рычаги недоступны его пользователям. И остаётся им уповать на то, что эта опция может быть переопределена в файле .htaccess
<IfModule mod_security2.c> SecRequestBodyLimit 2097152 LimitRequestBody 2097152 </IfModule>
Обратите внимание что файл .htaccess пишется с точкой в начале. В Linux среде это признак невидимости файла или каталога. Поэтому чтобы увидеть его включите в вашем ftp клиенте опцию отображения скрытых файлов. Если всё же по каким либо причинам файл .htaccess отсутствует в директории вашего WEB сайта значит его нужно создать и добавить в него следующую директиву:
# 0 — без ограничения — 2GB LimitRequestBody 2097152 ## 2 MB, должно хватить для большинства случаев.
После этого большое сообщение должно нормально выгружаться на сервер. Разумеется при условии если вы верно установили размер. Помните что в мультибайтные кодировки влияют на размер.
Однако это не всегда избавляет от ошибки. У меня заработал только такой вариант отключения ошибки директивами в файле .htaccess
<IfModule mod_security2.c> SecRuleEngine Off SecRequestBodyAccess Off </IfModule>