ПРОЕКТЫ 


  АРХИВ 


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: rewrite



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


  • References:

 




Copyright © Lexa Software, 1996-2009.