Некоторые пользователи 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.
Аналогичная ошибка может проявиться в любых других CMS, так как она связана с настройками безопасности WEB сервера.
При этом в журнале /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> |
<IfModule security2_module> SecRuleEngine Off </IfModule>
перед
</VirtualHost>
Должно получиться примерное так:
<VirtualHost 127.0.0.1:8080> ServerName test1.ru ServerAlias www.test1.ru DocumentRoot /var/www/user5/data/www/test1.ru ServerAdmin webmaster@test1..ru DirectoryIndex index.html index.php AddDefaultCharset UTF-8 SuexecUserGroup user5 user5 CustomLog /var/www/httpd-logs/test1.ru.access.log combined ErrorLog /var/www/httpd-logs/test1.ru.error.log <FilesMatch "\.ph(p[3-5]?|tml)$"> SetHandler fcgid-script FCGIWrapper /var/www/php-bin-isp-php70/user5/php </FilesMatch> SetEnvIf X-Forwarded-Proto https HTTPS=on <IfModule security2_module> SecRuleEngine Off </IfModule> </VirtualHost>