Nginx: обслуживать index.html в ближайшей родительской папке

Я запускаю несколько SPA в отдельных папках вместе с некоторыми статическими файлами. Структура выглядит следующим образом:

|
|- index.html
|- foobar.html
|---- SPA1/
|     |- index.html
|     |---- SPA1_1/
|           |- index.html
|---- SPA2/
      |- index.html

Ожидаемое поведение:

  • обслуживать все / SPA1 / SPA1_1 / foo / bar с SPA1 / SPA1_1 / index.html
  • обслуживать все SPAx / foo / bar с SPAx / index.html
  • serve / not_exist с /index.html
  • serve / foobar. html с /foobar.html

Короче говоря, я хочу, чтобы nginx попробовал следующие пути по порядку:

  • $ uri
  • $ uri ближайший родитель

Is есть ли способ добиться этого без указания правил для каждого каталога SPA?

1
задан 12 July 2017 в 09:50
1 ответ

Вы можете рекурсивно переписывать URI, каждый раз удаляя путь к каталогу, пока не будет найден файл index.html . Это будет внутренний цикл, и никакого внешнего перенаправления не будет.

Например:

location / {
    try_files $uri $uri/index.html @rewrite;
}
location @rewrite {
    rewrite ^(.*)/.+ $1/ last;
}
1
ответ дан 3 December 2019 в 23:28

Теги

Похожие вопросы