Re: 0.7.63 и выдача flv
Igor Sysoev
igor на sysoev.ru
Пт Дек 18 15:16:32 MSK 2009
On Fri, Dec 18, 2009 at 02:57:41PM +0300, Sergey Shepelev wrote:
> 2009/12/18 Igor Sysoev <igor at sysoev.ru>:
> > On Fri, Dec 18, 2009 at 02:25:20PM +0300, Sergey Shepelev wrote:
> >
> >> 2009/12/18 Igor Sysoev <igor at sysoev.ru>:
> >> > On Fri, Dec 18, 2009 at 05:59:10AM -0500, Yury wrote:
> >> >
> >> >> ну то есть правильнее будет написать:
> >> >> location ~ \.flv(\?start=[0-9]+)?$ {...}
> >> >>
> >> >> как-то так....
> >> >
> >> > query string не тестируется в location. Потому что в query string можно
> >> > написать чего угодно, например:
> >> >
> >> > /1.flv?чего-то-там&start=5
> >> > /1.flv?start=5&ещё-чего-то-там
> >> > /1.flv?как-то-так&start=5&ещё-чего-то-там
> >> >
> >> > И как это предлагается тетсировать ?
> >> >
> >>
> >> Вы же сами предлагали XSL синтаксис для расширения тестов location.
> >>
> >> Например, так.
> >>
> >> location ~ \.flv$
> >> ["start=" in $args]
> >> {
> >> root /foo;
> >> flv;
> >> }
> >
> > Да, но это не имеет отношения к обсуждаемой теме. Люди почему-то считают
> > в location нужно указывать аргументы. При этом почему-то не задумаываются,
> > что
> > /index.php?user=one&page=1
> > можно записать и как
> > /index.php?page=1&user=one
> >
>
> ээ... а /foo можно записать как /bar. Это всё разные урлы.
Потому что URI без query string однозначно определяет запрос, а
query string - нет. Например, /favicon.ico?чего-то-там - это всегда
файл /favicon.ico, независимо от "чего-то-там". А /baricon.ico
это всегда 404, тоже назависимо от "чего-то-там".
> Стандарт вообще говорит, что URI это path?query-string. Формат a=b&c=d
> это частный случай. Реально существует форум vbulletin, который делает
> урлы типа member.php?15. Это я к тому, что мы обсуждаем проблему
> одного частного случая. Даже если он сильно распространён.
>
> Интерпретация query аргументов в любом случае не на плечах nginx. В
> частности, и считать разный порядок кусков текста разделенных &
> разными или одинаковыми урлами. Ну, ещё хороший вариант - разбить
> $query_string по & и упорядочить получившийся массив строк по
> алфавиту. Тогда однозначно понятно, как именно писать location, но это
> медленно. По-моему, нормальный компромисс.
Нормальный компромисс - это
location ~ \.flv$ [ $arg_start ] {
> Уверен, что вы это всё знаете, но тогда я не понимаю озабоченности
> различием двух урлов выше. Будут обращаться, мол, у меня не матчится
> криво написанный локейшн?
Потому что тогда теряет смысл
location = / {
потому что придётся писать "~ ^/($|\?)". Зачем регекс там, где достаточно
простого сравнения.
--
Игорь Сысоев
http://sysoev.ru
Подробная информация о списке рассылки nginx-ru