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

Igor Sysoev is at rambler-co.ru
Thu Dec 11 15:46:47 MSK 2008


Поскольку я уже не могу смотреть без боли на кучи реврайтов,
то сегодня я изобрел революционную директиву 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/





More information about the nginx-ru mailing list