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