Sergey Shepelev пишет:
> 2009/9/22 Александр <sytar.alex@gmail.com>:
>
>> Добрый день
>>
>> Есть конструкция вида:
>>
>> if ($request_filename !~
>> (js|css|ico|gif|jpg|png|xml|pdf|gz|images|.html|robots.txt|index.php*) ) {
>> rewrite ^/(.*)$ /index.php/$1 last;
>> }
>>
>>
>
> .html
> это регексп, который матчит .html, jhtml, shtml, Khtml, 0html.
>
> index.php*
> это регексп, который матчит index.php, index.ph, index.phpppppp,
> indexRph, index9phpp.
>
> Точка матчит любой символ, а звезда матчит предыдущую маску (а
> поскольку скобок не было, то один символ) 0 или больше раз (сколько
> угодно).
>
>
>> которая должна все файлы кроме статики и index.php отправлять на
>> index.php. Но в данный момент она, скажем, не очень гибкая. Как её можно
>> переписать получше?
>>
>>
>>
>
> location = / { rewrite ^ /index.php/ last; }
> location / { rewrite ^/(.*) /index.php/$1 last; }
> location ~ (js|css|ico|gif|jpg|png|xml|pdf|gz|images|\.html|robots\.txt)$ {
> root /path;
> expires 6h;
> access_log off;
> }
> location /index.php {
> proxy(fastcgi)_pass ...
> }
>
> Это нужно, только если вашему PHP скрипту нужно получать запросы на
> несуществующие файлы, например, статика *.mjpg в списке расширений
> отсутствует. Она попадёт на index.php. Оно надо? Иногда бывает, но
> скорее всего - нет.
> Поэтому, самый лучший и гибкий вариант просто отдавать все существующие файлы:
>
> location = / { rewrite ^ /index.php/ last; }
> location / {
> try_files $uri /index.php/$uri; # <- здесь может быть ошибка
> root /path;
> expires 6h;
> access_log off;
> }
> location /index.php {
> proxy(fastcgi)_pass ...
> }
>
Спасибо ваша конструкция работает как надо.