try_files
- это хорошая директива для шаблонов динамического каркаса фронт-контроллера, работающего на PHP или других языках, где у вас есть один файл начальной загрузки, например, /index.php
, который "обслуживает" дружественные для SEO URL-адреса:
/foo/ -> /index.php
/bar/ -> /index.php
/lorem/ipsum -> /index.php
Если ваши файлы статичны и вы заранее знаете структуру файлов, try_files
не приносит ничего, кроме потери производительности системных вызовов stat
(проверка существования файла).
Напримерприменение try_files $uri $uri.html $uri/ =404;
из комментария Ричарда будет означать, что для URI /category-folder/category1
, NGINX сначала проверяет, существует ли вначале фактический файл /category-folder/category1
, затем проверяет, существует ли /category-folder/category1.html
, и, если нет, проверяет, /category-folder/category1/
каталог существует.
Имеет смысл придерживаться rewrite
, и преобразование конфигурации в этом случае довольно просто. Это приведет к совпадению 1: 1 с тем, как это работает в Apache.
Использование моего "довольно сложного" конвертера конфигурации Apache в NGINX , который определяет, когда вам нужно использовать try_files
а если нет, вы получите желаемую перезапись (поместите это непосредственно в контекст server
, а не в location
):
rewrite ^/([^\.]+)$ /$1.html last;
Чтобы проверить эту перезапись, вы можете использовать этот тест .
Как видите, единственная хитрость заключается в том, что URI в NGINX переписываются (и URI, указанные в NGINX в целом) должны начинаться с косой черты, тогда как в Apache они опускаются.