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