Re: Вопрос по логике

Sergey Shepelev temotor at gmail.com
Tue Sep 22 10:47:47 MSD 2009


2009/9/22 Александр <sytar.alex at 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 ...
}


More information about the nginx-ru mailing list