web-dev-qa-db-fra.com

nginx: envoie toutes les requêtes à une seule page HTML

En utilisant nginx, je souhaite conserver l’URL, mais charge en fait la même page, quoi qu’il en soit. Je vais utiliser l'URL avec History.getState() pour router les demandes dans mon application javascript. Il semble que cela devrait être une chose simple à faire?

location / {
    rewrite (.*) base.html break;
}

fonctionne, mais redirige l'URL? J'ai toujours besoin de l'URL, je veux juste utiliser toujours la même page.

142
prismofeverything

Je pense que cela va le faire pour vous:

location / {
    try_files /base.html =404;
}
178
Alex Howansky

En utilisant seulement try_files n'a pas fonctionné pour moi - cela a provoqué une erreur de réécriture ou de cycle de redirection interne dans mes journaux.

Les documents Nginx avaient quelques détails supplémentaires:

http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files

J'ai donc utilisé les éléments suivants:

root /var/www/mysite;

location / {
    try_files $uri /base.html;
}

location = /base.html {
    expires 30s;
}
24
Kevan Stannard

Votre réécriture originale devrait presque fonctionner. Je ne sais pas pourquoi cela redirigerait, mais je pense que ce que vous voulez vraiment, c'est juste

rewrite ^ /base.html break;

Vous devriez pouvoir mettre cela dans un emplacement ou directement sur le serveur.

16
kolbyjack

Cela a fonctionné pour moi:

location / {
    alias /path/to/my/indexfile/;
    try_files $uri /index.html;
}

Cela m'a permis de créer une URL fourre-tout pour une application javascript d'une seule page. Tous les fichiers statiques tels que css, polices et javascript construits par npm run build sera trouvé s’ils se trouvent dans le même répertoire que index.html.

Si les fichiers statiques étaient dans un autre répertoire, pour une raison quelconque, vous auriez également besoin de quelque chose comme:

# Static pages generated by "npm run build"
location ~ ^/css/|^/fonts/|^/semantic/|^/static/ {
    alias /path/to/my/staticfiles/;
}
11
Mark Chackerian

La bonne façon serait:

location / {
    rewrite (.*) base.html last;
}

En utilisant last, nginx trouvera un nouveau bloc location approprié en fonction du résultat de la réécriture.

try_files est également une approche parfaitement valide de ce problème.

7
Etherealone

Cela a fonctionné pour moi:

location / {
    try_files $uri $uri/ /base.html;
}
4
Abhishek