ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: index internal redirect



On 19.06.2011 18:44, Валентин Бартенев wrote:

try_files  !$uri  @php;

где ! - инвертирует результат обнаружение файла.

не совсем понятно, как этот синтаксис должен работать.
что делать в том случае, если файла действительно нет?
и что надо делать в том случае, когда такой файл есть?

Все то же самое, что делает директива try_files сейчас, только инвертируя
результат проверки.

"Директива проверяет существование файлов в заданном порядке и использует для обработки запроса первый найденный файл, причём обработка делается в контексте этого же location'а."

"инвертируя результат проверки" - это как, - использовать
для обработки запроса не-найденный и не-существующий файл?

В примере выше, если файл есть, то обработка произойдет в location @php.

а если этого файла нет:

try_files  !$uri  @php;

то где произойдет обработка, разве не в том же самом location @php ?

вместо такого sendmail-подобного расширения синтаксиса:

try_files  $uri@php $uri/  =404;

предлагаю лучше читаемый и лучше расширяемый вариант синтаксиса:

try_files  internal_redirect( @php )::$uri
             $uri/
             =404
             ;

Извините, я не знаком с sendmail,

http://www.lexa.ru/nginx-ru/msg34942.html

но то, что вы предложили, выглядит длиннее
страшнее и непонятнее.

если не понимать синтаксиса этого модификатора,
то разумеется, что это будет страшнее и непонятнее.
(хотя вчера/сегодня я детально расписал его семантику)

да, длиннее, зато не страдает читабельность конфига.
у сендмейла вот сократили все по максимуму 1 символ == 1 опция.
только вот что-то очень мало желающих поддерживать такие конфиги.

К тому же, не дает возможности написать, например,
такую конструкцию:

try_files  $uri.php@php $uri/@dir_list $uri  =404;

почему нет?

try_files  internal_redirect( @php )::$uri
           internal_redirect( @dir_list )::$uri/
           =404
           ;

...

кроме того,

try_files  $uri.php@php =404;

сплошнойтекстбезпробеловплохочитается.

а добавление одного пробела для улучшения читаемости ломает всю логику:

try_files  $uri.php @php =404;

В данном случае, приходится писать что-то вроде:

root путь/к/директории/c/файлом;
try_files файл =404;

Но директива try_files по смыслу, как мне кажется, не для этого задумывалась, и
логика ее работы сложнее, чем простой alias.

root + try_files - вполне нормально, это ведь не так часто требуется.
спорить не буду, но лично я в этом фрагменте конфига с root + try_files
не вижу каких-либо серьезных проблем, кроме необходимости
написать две строчки и две директивы вместо одной.

--
Best regards,
 Gena


_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.