Opened 4 years ago

Last modified 3 years ago

#1058 accepted defect

недокументированный редирект?

Reported by: roman.golova@… Owned by:
Priority: minor Milestone:
Component: documentation Version: 1.11.x
Keywords: Cc:
uname -a: Linux vid1 2.6.16.21-0.8-bigsmp #1 SMP Mon Jul 3 18:25:39 UTC 2006 i686 i686 i386 GNU/Linux
nginx -V: nginx version: nginx/1.11.3
built by gcc 4.1.0 (SUSE Linux)
configure arguments: --prefix=/www/nginx/ --pid-path=/www/nginx.pid --lock-path=/www/nginx.lock --user=nginx

Description

при запросе URL без концевого слэша всегда происходит 301 редирект на тот же URL со слэшем в конце

пример конфига:
location /dir {

alias /www/dir;

}

тоже самое происходит и в таком варианте:
location /dir/ {

alias /www/dir/;

}

Однако, в документации такое поведение, вроде бы, описано только для локэйшнов с *_pass, либо я не там искал, но нашёл я только вот это:

Если location задан префиксной строкой со слэшом в конце и запросы обрабатываются при помощи proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass или memcached_pass, происходит специальная обработка. В ответ на запрос с URI равным этой строке, но без завершающего слэша, будет возвращено постоянное перенаправление с кодом 301 на URI с добавленным в конец слэшом.

пример готовой конфигурации

location /ig {

alias /www/ig_build;

}

$curl -I http://localhost:90/ig/infografika
HTTP/1.1 301 Moved Permanently
Server: nginx/1.11.3
Date: Wed, 24 Aug 2016 09:52:10 GMT
Content-Type: text/html
Content-Length: 185
Location: http://localhost:90/ig/infografika/
Connection: keep-alive

Также проверял на версии 1.4.2, всё тоже самое.

Если директории нет - то сразу возвращает 404, но если она есть, а запрос был без слэша - возникает редирект.

Change History (1)

comment:1 by Maxim Dounin, 3 years ago

Component: otherdocumentation
Status: newaccepted

Да, судя по всему в документации это явно нигде на описано - просто потому, что поведение считается очевидным. Видимо, стоит явно описать.

Это называется "trailing slash redirect" или "directory redirect" и является стандартным поведением веб-серверов при обращении к директории, если в запросе отсутствует завершающий слэш.

Собственно, описанное поведение для локаций со слэшом в конце при использовании proxy_pass - суть эмуляция этого стандартного поведения для случаев, когда доступа к файловой системе nginx не имеет, а логика работы, аналогичная наличию директории, предполагается конфигурацией.

Note: See TracTickets for help on using tickets.