Я посмотрел документацию по nginx, и она все еще смущает меня.
Как try_files
работает? Вот что говорится в документации:
try_files
синтаксис: try_files путь1 [путь2] uri
по умолчанию: нет
контекст: сервер, местоположение
доступность: 0.7.27
Проверяет наличие файлов по порядку и возвращает первый найденный файл. Завершающий слеш указывает на каталог - $ uri /. Если файл не найден, вызывается внутреннее перенаправление на последний параметр. Последний параметр является резервным URI и должен существовать, иначе возникнет внутренняя ошибка. В отличие от перезаписи, $ args не сохраняется автоматически, если резервный вариант не является именованным местоположением. Если вам нужно сохранить аргументы, вы должны сделать это явно:
Я не понимаю, как он проверяет пути и что, если я не хочу внутренней ошибки, но должен ли он возобновить оставшуюся часть пути, чтобы найти другой файл?
Если я захочу попробовать кэшированный файл /path/app/cache/url/index.html
и если он не удастся попробовать, /path/app/index.php
как я это напишу? Если бы я написал:
try_files /path/app/cache/ $uri
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
У меня есть index index.php index.html index.htm;
. Когда я приезжаю /urlname
, он будет пытаться проверить /path/app/cache/urlname/index.php
то /path/app/cache/urlname/index.html
? Если мы проигнорируем все после try_files
того, можно try_files
ли проверить папку кэша? Я пытался и потерпел неудачу.
Вот еще одно удобное использование try_files в качестве безусловного перенаправления в именованные местоположения. Названные местоположения эффективно действуют как подпрограммы, сохраняя дублирование кода. Когда первый аргумент try_files - «_», всегда используется резервный редирект.
источник