Странное поведение if-set

Ivan Boldyrev lispnik at gmail.com
Thu Sep 18 11:11:12 MSD 2008


Здравствуйте!

Пытаюсь настроить nginx+MoinMoin через FastCGI (Gentoo Linux на x86).
Пробовал 0.6.29 и 0.7.16.

MoinMoin (это вики) берёт название страницы из PATH_INFO.  Если строка
запроса /wiki/BlaBla, то в PATH_INFO должно быть /BlaBla.

Если делать так:

     location /wiki/ {
         if ($fastcgi_script_name ~ ^/wiki(.*)) {
             set $pinfo $1;
         }
         include /etc/nginx/fastcgi_params;
         fastcgi_param PATH_INFO $pinfo;
         fastcgi_pass localhost:11000;
     }

то вики получает от nginxа PATH_INFO в виде %d0%a1%d0%b8 (если
предположить, что название страницы кириллицей; пробелы тоже получаются
закодированными как %20) -- т.е. http-encoded, что неправильно.
Получается, что либо if, либо set эскейпит строки.

Если сделать так: 

     location /wiki/ {
         include /etc/nginx/fastcgi_params;
         fastcgi_param PATH_INFO $fastcgi_script_name;
         fastcgi_pass localhost:11000;
     }

то вики получает UTF-8 строку, как и должно быть, но впереди стоит
префикс /wiki, и страница опять же не находится (if-set как раз
использовался, чтобы убрать этот префикс, чтобы вычислить PATH_INFO).

Я включил debug и удостоверился, что nginx действительно в первом случае
передаёт закодированную строку, а во втором -- незакодированную, но с
префиксом /wiki.

2008/09/18 13:05:06 [debug] 15344#0: *1 fastcgi param: "PATH_INFO: /%d0%a1%d0%b8%d1%81%d1%82%d0%b5%d0%bc%d0%b0%d1%82%d0%b8%d0%ba%d0%b0"

2008/09/18 13:08:11 [debug] 15540#0: *1 fastcgi param: "PATH_INFO: /wiki/[UTF-8-string]"

Есть ли какой-нибудь другой способ вычислить PATH_INFO?

-- 
Ivan Boldyrev






More information about the nginx-ru mailing list