Nginx: serve index.html na pasta pai mais próxima

1

Estou executando vários SPAs em pastas separadas, juntamente com alguns arquivos estáticos. A estrutura é a seguinte:

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

O comportamento esperado é:

  • atende todos os /SPA1/SPA1_1/foo/bar com SPA1/SPA1_1/index.html
  • atende todos os SPAx/foo/bar com SPAx/index.html
  • veicule /not_exist com /index.html
  • veicule /foobar.html com /foobar.html

Em suma, quero que o nginx tente os seguintes caminhos na ordem:

  • $uri
  • O pai mais próximo de $uri

Existe alguma maneira de conseguir isso sem especificar regras para cada diretório do SPA?

    
por lz96 12.07.2017 / 08:50

1 resposta

1

Você pode recursivamente reescrever o URI removendo um caminho de diretório a cada vez, até que o arquivo index.html esteja localizado. Isso seria um loop interno e nenhum redirecionamento externo aconteceria.

Por exemplo:

location / {
    try_files $uri $uri/index.html @rewrite;
}
location @rewrite {
    rewrite ^(.*)/.+ $1/ last;
}
    
por 12.07.2017 / 10:30

Tags