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

Igor Sysoev is at rambler-co.ru
Thu Nov 23 12:38:34 MSK 2006


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





More information about the nginx-ru mailing list