LINUX.ORG.RU

История изменений

Исправление tiandrey, (текущая версия) :

Я убил на это час, но наконец-то понял, почему всё так, а не иначе.

Итак, почему эта конфигурация не работает так, как ты хочешь:

  • index обрабатывает только те запросы, которые оканчиваются на /
  • try_files проверяет наличие указанных файлов/директорий, если находит - отдаёт, при этом uri не переписывается, всё обрабатывается в контексте текущей локации
  • try_files $uri $uri/ /; - проверяет наличие такого файла или такой директории. Если nginx отдаёт ресурс, являющийся директорией, а uri не оканчивается на слеш, то index не включается в работу, и nginx отдаёт редирект на uri директории + слеш в конце.
  • $uri для try_files это проверка существования файла, а $uri/ - проверка существования директории (да в принципе любая строка, которая не оканчивается на слеш до раскрытия переменных - это проверка на файл, а которая оканчивается - проверка на директорию)
  • поведение, которое ты хочешь, достигается таким конфигом:
               location /testapp {
                 root   /home/vasyan/apps/;
                 try_files $uri $uri/index.html $uri/index.htm /;
               }
    
    т.е. логику index надо в try_files засунуть.

Исправление tiandrey, :

Я убил на это час, но наконец-то понял, почему всё так, а не иначе.

Итак, почему эта конфигурация не работает так, как ты хочешь:

  • index обрабатывает только те запросы, которые оканчиваются на /
  • try_files проверяет наличие указанных файлов/директорий, если находит - отдаёт, при этом uri не переписывается, всё обрабатывается в контексте текущей локации
  • try_files $uri $uri/ /; - проверяет наличие такого файла или такой директории. Если nginx отдаёт ресурс, являющийся директорией, а uri не оканчивается на слеш, то index не включается в работу, и nginx отдаёт редирект на uri директории + слеш в конце.
  • $uri для try_files это проверка существования файла, а $uri/ - проверка существования директории
  • поведение, которое ты хочешь, достигается таким конфигом:
               location /testapp {
                 root   /home/vasyan/apps/;
                 try_files $uri $uri/index.html $uri/index.htm /;
               }
    
    т.е. логику index надо в try_files засунуть.

Исправление tiandrey, :

Я убил на это час, но наконец-то понял, почему всё так, а не иначе.

Итак, почему эта конфигурация не работает так, как ты хочешь:

  • index обрабатывает только те запросы, которые оканчиваются на /
  • try_files проверяет наличие указанных файлов/директорий, если находит - отдаёт, при этом uri не переписывается, всё обрабатывается в контексте текущей локации
  • try_files $uri $uri/ /; - проверяет наличие такого файла или такой директории. Если nginx отдаёт ресурс, являющийся директорией, а uri не оканчивается на слеш, то index не включается в работу, и nginx отдаёт редирект на uri директории + слеш в конце.
  • если uri не оканчивается на /, то $uri для try_files это проверка существования файла, а $uri/ - проверка существования директории
  • поведение, которое ты хочешь, достигается таким конфигом:
               location /testapp {
                 root   /home/vasyan/apps/;
                 try_files $uri $uri/index.html $uri/index.htm /;
               }
    
    т.е. логику index надо в try_files засунуть.

Исходная версия tiandrey, :

Я убил на это час, но наконец-то понял, почему всё так, а не иначе.

Итак, почему эта конфигурация не работает так, как ты хочешь:

  • index обрабатывает только те запросы, которые оканчиваются на /
  • try_files проверяет наличие указанных файлов/директорий, если находит - отдаёт, при этом uri не переписывается, всё обрабатывается в контексте текущей локации
  • try_files $uri $uri/ /; - проверяет наличие такого файла или такой директории. Если nginx отдаёт ресурс, являющийся директорией, а uri не оканчивается на слеш, то index не включается в работу, и nginx отдаёт редирект на uri директории + слеш в конце.
  • поведение, которое ты хочешь, достигается таким конфигом:
               location /testapp {
                 root   /home/vasyan/apps/;
                 try_files $uri $uri/index.html $uri/index.htm /;
               }
    
    т.е. логику index надо в try_files засунуть.