LINUX.ORG.RU

История изменений

Исправление leg0las, (текущая версия) :

Немного поколупавшись, разобрался. Основное, что нужно для работоспособности движка:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L,QSA]

Кусок site из sites-enabled:

...
location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include /etc/nginx/fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $request_filename;
}

location ~ \.(css|js|jpg|gif)$ {}

autoindex off;
location / {
                if (!-e $request_filename) {
                        rewrite ^(.*)$ /$1 last;
                }
        }
...

при

rewrite ^(.*)$ /$1 last;

получаем ошибку 500, кусок лога нгинкса:

*31 rewrite or internal redirection cycle while processing "////////////blahblahblah"

при

rewrite ^(.*)$ /$1 break;

получаем 404, файл не найден, в логе:

"<путь к движку>/<ссылка, полученая реврайтом>" failed (2: No such file or directory)

т.е. оно обрабатывает ссылку, обрезает ее в соответствии с правилами rewrite и пытается найти файл по этому пути, которого естественно нет.

Комбинации last; + break; не помогли.

Кстати, php-fpm и mpm-worker завелись, в php.ini требовалось cgi.fix_pathinfo=1 вместо «nginxовского» рекомендуемого 0.

Исходная версия leg0las, :

Немного поколупавшись, разобрался. Основное, что нужно для работоспособности движка:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L,QSA]

Кусок site из sites-enabled:

...
location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include /etc/nginx/fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $request_filename;
}

location ~ \.(css|js|jpg|gif)$ {}

autoindex off;
location / {
                if (!-e $request_filename) {
                        rewrite ^(.*)$ /$1 last;
                }
        }
...

при

rewrite ^(.*)$ /$1 last;

получаем ошибку 500, кусок лога нгинкса:

*31 rewrite or internal redirection cycle while processing "////////////blahblahblah"

при

rewrite ^(.*)$ /$1 break;

получаем 404, файл не найден, в логе:

"<путь к движку>/<ссылка, полученая реврайтом>" failed (2: No such file or directory)

т.е. оно обрабатывает ссылку, обрезает ее в соответствии с правилами rewrite и пытается найти файл по этому пути, которого естественно нет.

Комбинации last; + break; не помогли.