Странное поведение 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