Re: эмуляция if/else
David Mzareulyan
david at hiero.ru
Thu Apr 24 13:02:31 MSD 2008
Так никто на вопрос-то и не ответил -- про last/break. А место в самом деле
не очень понятное. Вот на http://sysoev.ru/nginx/docs/http/ngx_http_rewrite_module.html#rewrite
написано:
===============
Если же эти директивы поместить в location /download/, то нужно заменить
флаг last на break, иначе nginx сделает 10 циклов и вернёт ошибку 500:
location /download/ {
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break;
rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra break;
return 403;
}
===============
Во-первых, ПОЧЕМУ last вызовет зацикливание? После первого же рерайта запрос
перестанет попадать в паттерн -- там же media заменится на mp3. Во-вторых,
куда всё-таки пойдёт управление после break? На return? Или поскольку return
тоже "директива ngx_http_rewrite_module" -- дальше пойдёт отдача из этой
локации статикой?
> Всегда были не совсем ясны сходство и различия break;, rewrite break и
> rewrite last.
>
> Обычная задача. Существующие файлы отдавать статикой, несуществующие
> проксировать. Сейчас написано два if: -f и !-f.
>
> Как это написать более правильно?
>
> Может так? Есть комментарии по поводу этого куска?
>
> location / {
> if (-f $request_filename) {
> break;
> root html;
> }
> proxy_pass http://127.0.0.1:1234;
> }
> Вдогонку.
>
> proxy_pass http://localhost/; # (!!!) / в конце
>
> это то же самое, что
>
> rewrite .* /;
> proxy_pass http://localhost;
> ?
>
> Заранее спасибо за помощь.
>
--
С уважением
Давид Мзареулян
david at hiero.ru
More information about the nginx-ru
mailing list