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
|