mediawiki rewrite rules

Dmitri Sintsov sdv at uniyar.ac.ru
Thu Jun 11 14:08:35 MSD 2009


Dmitri Sintsov пишет:
> Здравствуйте, Nginx-ru
> Предлагаемые правила rewrite для движка mediawiki
>
> http://wiki.nginx.org/NginxMediaWiki
>
> "страдают" тем, что в названиях статей, содержащих знак вопроса, 
> усекаются все символы после знака вопроса:
>
> http://site.ru/Что делать? Чернышевский
>
> превращается в
>
> http://site.ru/Что делать?
>
>
> Я пытаюсь разработать более корректные правила, но пока что не 
> получается, может найдете пару минут подскажите в чем ошибка?
>
> Все статьи должны передаваться на /index.php?Title=
> причем знак вопроса в названии статьи пытаюсь экранировать с помощью %3F
> php скрипты разумеется не преобразовываются.
>
>       location / {
>           index index.php;
>           error_page 404 = @mediawiki;
>       }
>            location @mediawiki {
>           set $test "A";
>           if ($args ~* ^/.*?\?.*) {
>               set $test  "${test}Q";
>           }
>           if ($args ~* ^/.*?\.php.*) {
>               set $test  "${test}P";
>           }
>           if ($test = A) {
>               rewrite ^/(.*)? /index.php?title=$1 last;
>           }
>           if ($test = AQ) {
>               rewrite ^/([^?]*)(?:\?(.*))? /index.php?title=$1%3F$2 last;
>           }
>           if ($test = AQP) {
>               rewrite ^/(.*)? /$1 last;
>           }
>       }
>            location ~* ^(.)+\.(php)$ {
>           proxy_pass                  http://........
>
>
> proxy pass идет на apache, в нем rewrite не используется.
>
> Нет ли у nginx rewrite debug log, по аналогии с apache?
>
> Версия nginx 0.6.35
>
> из "эстетических" соображений при формировании url не используется 
> urlencode(),
> но вроде бы это не должно влиять на правила, тем более что ? я пытаюсь 
> заменить на %3F самостоятельно.
>
> С уважением,
> Дмитрий
>
>

Отвечу пока что сам себе: поставил location @mediawiki {
                        rewrite_log  on;

$args заменил на $request_filename

Вроде бы правила стали работать, но почему-то в логе nginx путь к 
ресурсу уже показывается усеченным без query части после знака вопроса.
*11227 "^/(.*)?" matches "/Что делать"
"заранее" часть после знака вопроса откушена.
Все равно не работает.
И еще no such file or directory выдает.. это надо if (-f 
$request_filename) поставить только вот в какой location лучше его?
Дмитрий


More information about the nginx-ru mailing list