Re: Пустой массив $_POST

Maxim Dounin mdounin на mdounin.ru
Вт Дек 21 13:34:33 MSK 2010


Hello!

On Tue, Dec 21, 2010 at 11:24:10AM +0200, star0x4b at gmail.com wrote:

> Здравствуйте.
> 
> Есть конфиг сайта, работающего на zend framework. Перенаправление
> несуществующих страниц на index.php осуществлялось с помощью директивы
> error_page 404, но тут появилась проблема - POST-запросы передавались от
> нжинкса в php пустыми. GET-запросы при этом передаются нормально. Если
> же перенаправлять с помощью реврайта - все работает. Но использовать
> реврайты некошерно, поэтому хотелось бы понять, что не так с error_page?

При перенаправлении по error_page в обычный uri - метод запроса 
меняется на GET.  Это сделано для того, чтобы error_page мог 
выполнять свою основную функцию: возвращать страницы ошибок (e.g. 
статический файл /404.html очень удивиться, если в него попытаются 
сделать POST).

Если метод запроса менять не нужно, то надо использовать 
перенаправление в именованный location.  I.e.

    error_page 404 = @fallback;

    location @fallback {
        ...
    }

> Конфиг приведен ниже.
> 
> server {
>         listen      80;
>         server_name  servername.ru;
>         root   /usr/local/www/repos/servername.ru/public;
>         access_log  /var/log/nginx/zfproject_main_access.log;
>         error_log  /var/log/nginx/zfproject_error.log;
> 
>         index    index.php;
> #        error_page 404 = /index.php?$args;
>         rewrite  ^(/.*)$  /index.php last;

Если вас устраивает такой rewrite (т.е. вообще всё отправляется на 
/index.php), то всё это вообще не нужно.  Достаточно сделать так:

    location / {
        fastcgi_pass unix:/tmp/php-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root/index.php;
        ...
    }

Maxim Dounin



Подробная информация о списке рассылки nginx-ru