непонятка с 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