непонятка с rewrite

Igor Sysoev is at rambler-co.ru
Sat Apr 9 17:37:28 MSD 2005


On Sat, 9 Apr 2005, RaPaMaN wrote:

> Igor Sysoev пишет:
>
>> On Sat, 9 Apr 2005, RaPaMaN wrote:
>> 
>> 
>> Не нужен break в
>> 
>>      rewrite  ^.+$  /index.php  break;
>> 
>> так как после break не определяется конфигурация для изменённого URI,
>> а остаётся та, к которой выполнялся rewrite, то есть,
>> 
>>  location ~* ^(?!.+\.(css|gif|jpg|txt|html|htm|png|jpeg|ico))$ {
>>       rewrite  ^.+$  /index.php  break;
>>  }
>> 
>> В этой конфигурации нет ничего про fastcgi, это статические файлы.
>
> А после захода в такой location и rewrite будет дальше проверять совпадения 
> по location ?

http://sysoev.ru/nginx/docs/http/ngx_http_rewrite_module.html

Если в выбранном location тоже есть директивы модуля
ngx_http_rewrite_module, то они также выполняются. Если URI изменился
в результате исполнения директив внутри location, то снова определяется
location для уже нового URI. Этот цикл может повторяться до 10 раз,
после чего nginx возвращает ошибку "Server Internal Error" (500).

>>> Как я понимаю, в rewrite я не могу прописать pcre, чтобы rewrite 
>>> срабатывал "для всего, кроме ...), т..е. ^(?:.+(?!\.css|.htm....))$
>> 
>> 
>> Можно.
>
> Я пробовал прописать после
> location = / {
> }
>
> rewrite ^(?:.+(?!\.htm|\.css|....))$ /index.php last;
>
> дальше все остальные location ....

Поряд здесь не играет роли. Сначала отрабатываются все rewrite на уровне
сервера, потом определяется location. Потом отрабатываются все rewrite
в определившемся location. Если URI был изменён и не было break, то
опять определяется location. И так до 10 раз.

> и nginx абсолютно всему делает rewrite, т.е. я понял, что rewrite сейчас не 
> отрабатывает на совпадение и делать rewrite или пропустить, потому как туда 
> все попадает.

Я не уверен, что "^(?:.+(?!\.htm|\.css|....))$" означает "всё, что
не оканчивается на .htm, .css, ...


Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list