Nginx: servez index.html dans le dossier parent le plus proche

J'utilise plusieurs SPA dans des dossiers distincts avec des files statiques. La structure est la suivante:

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

Le comportement attendu est le suivant:

  • servir tout /SPA1/SPA1_1/foo/bar avec SPA1/SPA1_1/index.html
  • servir tous SPAx/foo/bar avec SPAx/index.html
  • servir /not_exist avec /index.html
  • servir /foobar.html avec /foobar.html

En bref, je veux que nginx tente les paths suivants dans l'ordre:

  • $uri
  • $uri parent le plus proche de $uri

Existe-t-il un moyen d'y parvenir sans spécifier les règles pour chaque directory SPA?

Vous pouvez réécrire de manière récurrente l'URI en supprimant chaque fois un path d'access, jusqu'à ce que le file index.html soit situé. Ce serait une boucle interne, et aucune redirection externe n'aurait lieu.

Par exemple:

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