rewrite

Igor Sysoev is at rambler-co.ru
Fri Jan 30 13:53:25 MSK 2009


On Fri, Jan 30, 2009 at 12:25:16PM +0200, Vasyl Kondrashov wrote:

> Понадобилось перевсти для nginx следующие правила apache:
> RewriteRule ^$ /index.php [L]

Что такое "^$" ? По-моему, оно вообще никогда не работает.
Если же имеется ввиду просто "/", то это записывается так:

   location = / {
       rewrite ^  /index.php  last;
   }

> RewriteCond $1 !^(index\.php|install|img|smarty|images|scripts|fonts|uploads|css|js|robots\.txt|sitemap\.xml|favicon\.ico)

Что такое "$1" ? От чего это capture ?

> RewriteRule ^(.*)$ /index.php/$1 [L,QSA]
> RewriteRule (.*)-(.*)\.html$ wallpapers/show/$2
> RewriteRule (.*)-(.*)/$ categories/show/$2
> RewriteRule (.*)-(.*)\/(.*)$ categories/show/$2/$3
> 
> 
> Получается конструкция типа:
> 
> rewrite ^$ index.php last;
> ...
> rewrite (.*)-(.*)\.html$ wallpapers/show/$2
> rewrite (.*)-(.*)/$ categories/show/$2
> rewrite (.*)-(.*)\/(.*)$ categories/show/$2/$3
> 
> 
> В принципе, понятно, для QSA прописываю "fastcgi_param QUERY_STRING
> $request_uri;"

Нет, QSA в nginx'е делается автоматически.

> но второе правило с условием - никак, получаются либо вложенные if,
> либо "location !~..."
> Насколько я понимаю, "!" и вложенные if  не работают - а как вывернуть
> это наизнанку - ума не приложу :(
> Может кто сталкивался с чем-то подобным?

Не нужно транслировать реврайты Апача напрямую: они зачастую делаются
с отрицательной логикой, именно что наизнанку.

"location !~..." - это два location'а с прямой логикой:

   location / {
       ...
   }

   location ~ "..." {
       ...
   }

Судя по всему, нужно писать что-то вроде этого:

   root  ...;

   location = / {
       rewrite  ^  /index.php   last;
   }

   location / {
       rewrite  ^(.*)$  /index.php/$1 last;
   }

   location /index.php {
       ...
   }

   location ~ (install|img|smarty|images|scripts|fonts|uploads|css|js|robots\.txt|sitemap\.xml|favicon\.ico) {
       # статика
   }

   location ~ .*-.*\.html$ {
       rewrite (.*)-(.*)\.html$  /wallpapers/show/$2  break;
   }

   location ~ .*-.*/$ {
       rewrite (.*)-(.*)/$       /categories/show/$2  break;
   }


-- 
Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list