Привет.
Есть конфигурация (тут всё заведомо упрощено до необходимого минимума):
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