Re[2]: эмуляция if/else

Denis F. Latypoff denis at gostats.ru
Thu Apr 24 13:56:54 MSD 2008


Hello David,

Thursday, April 24, 2008, 4:02:31 PM, you wrote:

> Так никто на вопрос-то и не ответил -- про 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;
>> ?
>> 
>> Заранее спасибо за помощь.
>> 





-- 
Best regards,
 Denis                            mailto:denis at gostats.ru






More information about the nginx-ru mailing list