ПРОЕКТЫ 


  АРХИВ 


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]

революционные нанотех нологии!



Поскольку я уже не могу смотреть без боли на кучи реврайтов,
то сегодня я изобрел революционную директиву file_match.

Вместо

   location / {

       if (-f $request_filename) {
           break;
       }

       if (-f $request_filename/index.html) {
           rewrite (.*) $1/index.html break;
       }

       if (-f $request_filename.html) {
           rewrite (.*) $1.html break;
       }

       if (!-f $request_filename) {
           proxy_pass http://mongrel;
           break;
       }
   }

предлагается писать

      location / {
          file_match  $uri  $uri/index.html  $uri.html
                      @mongrel;
      }

      location @mongrel {
          proxy_pass  http://mongrel;
      }

Для любителей Drupal/Joomla:

      location / {
          file_match  $uri  @drupal;
          # то же самое, что
          #    error_page  404 = @drupal; log_not_found off;
      }

      location ~ \.php$ {
          file_match  $uri  @drupal;

          fastcgi_pass   ...
          fastcgi_param  SCRIPT_FILENAME /path/to$script_filename;
      }

      location @drupal {
          fastcgi_pass   ...
          fastcgi_param  SCRIPT_FILENAME /path/to/index.php;
      }

file_match перебирает параметры и пытается найти соответствие на файловой
системе. Если файл найден, то URI меняется на этот параметр и обработка
делается в том же location'е. Последний параметр - fallback.


-- 
Igor Sysoev
http://sysoev.ru/en/



 




Copyright © Lexa Software, 1996-2009.