ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Закрытие око нечного слэша



On Wed, 22 Nov 2006, Alexandr Mikhal'kov wrote:

Привет.

Есть конфигурация (тут всё заведомо упрощено до необходимого минимума):

server {
        listen 80;
        server_name buahaha.lo;
        root  /www/buahaha.lo/htdocs;

        error_page   404          /errors/404.htm;
        error_page   403          /errors/403.htm;

        location  /errors/ {
                internal;
        }

        if ($request_uri !~ \.){
if ($uri = $request_uri){ rewrite ^/(.+[^/])$ http://$host/$1/ permanent;
                }
        }
}

В штатном режиме всё работает нормально, при возникновении 404 или 403
ошибки  игнорируются директивы error_page и выводится сообщение об
ошибке сгенерированное nginx.

Замена location  /errors/ на

location  /errors/ {
        internal;
        break;
}

вызывает редирект на /errors/404.htm/ (добавляется последний слэш)

Это кривые руки или досадный баг?

Я не знаю, как привёднная упрощённая конфигурация работает,
но у меня на вложенный "if" она выдаёт "directive "if" in ...
is not allowed here", что верно.

Что касается оброботки, например, /errors/404.htm, то нужно учитывать,
что до того, как она попадёт в "location  /errors/", она пройдёт через
серверный if/rewrite. Поэтому if/rewrite'ы имеет смысл выносить
внутрь location'ов.


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



 




Copyright © Lexa Software, 1996-2009.