Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Странное поведение if-set
- To: nginx-ru@xxxxxxxxx
- Subject: Странное поведение if-set
- From: Ivan Boldyrev <lispnik@xxxxxxxxx>
- Date: Thu, 18 Sep 2008 14:11:12 +0700
- Openpgp: id=0xE2B9AC8FAE956E17; preference=signencrypt
- Organization: this field is intentionally left blank
Здравствуйте!
Пытаюсь настроить 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
|