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