Re: Nginx редиректит (301) с добавлением слэша

Maxim Dounin mdounin at mdounin.ru
Wed Jun 26 07:50:45 UTC 2013


Hello!

On Wed, Jun 26, 2013 at 03:33:19AM -0400, wilful wrote:

> Спасибо за ответы. Привожу пример всего конфига. Бакэнд в данном случа я
> отключил вообще (в первом сообщении 404 это ошибка о том, что не найден
> индекс заглушки, но редирект происходит раньше)

[...]

> В апач есть директива отключения таких редиректов, как можно поступить в
> случае nginx, чтобы обработка папки передавалась на бакэнд?

Нужно явно обрабатывать запросы к каталогам без "/" на конце.  
Например как-то так можно передать обработку всех каталогов на 
бекенд:

    location / {
        # only _files_ are handled here, directories and 
        # non-existent uris will go to @directory location

        try_files $uri @directory;
    }

    location @directory {
        try_files $uri/ =404;
        proxy_pass http://backend;
    }

А если к вышеприведённому конфигу ещё добавить что-нибудь вроде

    location ~ /$ {
        # if an uri ends with "/", handle it here
    }

то на бекенд уйдут только запросы к каталогам без "/" на конце.

Алтернативные варианты конфигураций можно поискать в архивах 
рассылки, ключевые слова - trailing slash redirect.

> Если использовать error_page 404 @fetch; вместо try_files, то всё равно
> происходит редирект.

Директива try_files не имеет отношения к редиректу.  В вашем 
исходном конфиге директива try_files лишь обеспечивала обработку 
существующих каталогов модулем static nginx'а.

-- 
Maxim Dounin
http://nginx.org/en/donation.html



Подробная информация о списке рассылки nginx-ru